我需要在当前(和之前)月的第一天之前获得日期,即30天(之后我将使用90或18O).我写了这个,但我认为这是不必要的复杂,所以我来这里寻求帮助.这有什么办法可以简化这个:
ib_encodedate(EXTRACT(YEAR from (dateadd(-30-datediff(day from cast(EXTRACT(MONTH from CURRENT_DATE)
|| '-1-'
|| EXTRACT(YEAR from CURRENT_DATE) as date) to date 'now') DAY to CURRENT_DATE))), EXTRACT(MONTH from (dateadd(-30-datediff(day from cast(EXTRACT(MONTH from CURRENT_DATE)
|| '-1-'
|| EXTRACT(YEAR from CURRENT_DATE) as date) to date 'now') DAY to CURRENT_DATE))),EXTRACT(DAY from (dateadd(-30-datediff(day from cast(EXTRACT(MONTH from CURRENT_DATE)
|| '-1-'
|| EXTRACT(YEAR from CURRENT_DATE) as date) to date 'now') DAY to CURRENT_DATE))))
Run Code Online (Sandbox Code Playgroud)
在数据库中我有日期double,所以我必须使用函数ib_encodedate将日期转换为double与数据库中的日期进行比较.功能有原型:
ib_encodedate(INT year, INT month, INT day)
Run Code Online (Sandbox Code Playgroud)
我需要写一个月的最后一天.
谢谢你的帮助.
好像你需要这样的东西:
SELECT
DATEADD (-EXTRACT(DAY FROM CURRENT_DATE)+1 DAY TO CURRENT_DATE) AS FIRST_DAY_OF_MONTH,
DATEADD (-30 DAY TO DATEADD (-EXTRACT(DAY FROM CURRENT_DATE)+1 DAY TO CURRENT_DATE)) AS A_MONTH_AGO,
DATEADD (-90 DAY TO DATEADD (-EXTRACT(DAY FROM CURRENT_DATE)+1 DAY TO CURRENT_DATE)) AS THREE_MONTHS_AGO,
DATEADD (-180 DAY TO DATEADD (-EXTRACT(DAY FROM CURRENT_DATE)+1 DAY TO CURRENT_DATE)) AS SIX_MONTHS_AGO
FROM
RDB$DATABASE
Run Code Online (Sandbox Code Playgroud)
使用firebird中的DATEADD函数,您可以轻松完成此操作.
小智 5
日期的第一天:
select cast(:DATA as date) - extract(day from cast(:DATA as date)) + 1 from RDB$DATABASE
Run Code Online (Sandbox Code Playgroud)
日期的最后一天:
select cast(:DATA as date) - extract(day from cast(:DATA as date)) + 32 - extract(day from (cast(:DATA as date) - extract(day from cast(:DATA as date)) + 32)) from RDB$DATABASE
Run Code Online (Sandbox Code Playgroud)