db2 查询当前月份到当前日期

问题描述 投票:0回答:2

我有以下疑问,

AND LOG.CHGTS BETWEEN CURRENT DATE - (DAY(CURRENT DATE)-1) DAYS - 1 MONTH AND CURRENT DATE - DAY(CURRENT DATE) DAYS

但它给了我上个月的输出(例如,现在是 9 月。但是,输出将查询去年 8 月 1 日至 31 日的记录,而应该是 9 月 1 日至 30 日)。

我在这里缺少什么?谢谢。

sql db2
2个回答
0
投票

名字

CHGTS
表明你的列是一个时间戳,当比较日期和时间戳时,你必须记住
CHGTS <= date '20230930'
在午夜之后就不是真的了。在这些情况下我宁愿不使用
BETWEEN

TRUNC_TIMESTAMP
可在 DB2 LUWIBM iZ/OS

中使用
 with log (CHGTS) as (
  values timestamp(date '2023-08-28', current time)
  union all
  select
    log.CHGTS + 3 day
  from log
  where log.CHGTS <= date '2023-10-03'
)
 select
  *
from
  log
where
  log.CHGTS >= trunc_timestamp(current timestamp, 'MONTH')
  and log.CHGTS < trunc_timestamp(current timestamp, 'MONTH') + 1 month
CHGTS
2023-09-03 09:57:09.000000
2023-09-06 09:57:09.000000
2023-09-09 09:57:09.000000
2023-09-12 09:57:09.000000
2023-09-15 09:57:09.000000
2023-09-18 09:57:09.000000
2023-09-21 09:57:09.000000
2023-09-24 09:57:09.000000
2023-09-27 09:57:09.000000
2023-09-30 09:57:09.000000

小提琴


0
投票

如果

LOG.CHGTS
具有
Timestamp
数据类型,那么最好使用以下表达式来表示当前月份的开始和结束,并使用
LOG.CHGTS >= I.S AND LOG.CHTS < I.E

SELECT CURRENT DATE AS C, I.*
FROM 
(
  VALUES
  (
    CURRENT_DATE - DAY (CURRENT_DATE) + 1
  , CURRENT_DATE - DAY (CURRENT_DATE) + 1 + 1 MONTH -- - 1
  )
) I (S, E)
C S E
2023-09-20 2023-09-01 2023-10-01

如果

LOG.CHGTS
Date
并且您想使用
BETWEEN
,则取消注释掉的
- 1
即可得到
I.E
==
last day of the current month

© www.soinside.com 2019 - 2024. All rights reserved.