sql - 将每月的第一天和最后一天放入变量中 - Oracle

标签 sql oracle plsql oracle11g

我想声明一些包含 Oracle 中当月的第一个和最后一个日期的变量。我知道如何获取这些值,但显然不存储或使用它们;我更喜欢 T-SQL。

在 T-SQL 中,我可以这样写:

DECLARE @startDate DATE = GETDATE();
DECLARE @endDate DATE = EOMONTH(GETDATE());

SELECT *
FROM SomeTable
WHERE SomeDate BETWEEN @startDate AND @endDate;

我一生都无法弄清楚如何在 Oracle 中执行此操作。我尝试了几种变体,例如:

DECLARE END_DT DATE := TRUNC(LAST_DAY(SYSDATE))
END_DT DATE := TRUNC(LAST_DAY(SYSDATE))

DECLARE END_DT DATE;
SELECT TRUNC(LAST_DAY(SYSDATE)) INTO END_DT FROM DUAL;

我主要使用 11g,但我希望也能够在 9i/10g 服务器上使用相同的脚本。

最佳答案

您可以使用这样的查询来检测当月的第一天和最后一天:

SELECT TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-1)))+1,
       TRUNC(LAST_DAY(SYSDATE)) 
  INTO :startDate,:endDate 
  FROM DUAL;

贡献者ADD_MONTHS()功能

更新:或者使用此 PL/SQL 代码块:

DECLARE
  startDate date;
  endDate   date;
BEGIN
 startDate := TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-1)))+1;
 endDate   := TRUNC(LAST_DAY(SYSDATE)); 
 DBMS_OUTPUT.PUT_LINE ('startDate :  '||startDate); 
 DBMS_OUTPUT.PUT_LINE ('endDate :  '||endDate);  
END;
/

Demo

关于sql - 将每月的第一天和最后一天放入变量中 - Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59386550/

相关文章:

sql - 如何从表列获取xml值

MySQL:案例查询中的案例查询?

java - Spring存储过程传递数组

从 Oracle 存储过程返回 XML

xml - 在复杂的 PL/SQL 中使用 Oracle XMLElement

sql - 关系划分-模仿 'ONLY IN'

mysql - 如何从 mysql 数据库中的每个表名中删除前缀名称

sql - 在什么条件下 ROWNUM=1 会显着提高 "exists"syle 查询的性能

oracle - 如何在 PL/SQL 中将天数(第 331 天)转换为 yyyymmdd?

xml - 使用 refcursor 作为参数类型时的 SOA Gateway xml 输出