我的查询返回了从日期(lngth_srvc)派生的变量的奇怪结果。我认为某些东西被视为字符,而我得到的输出是字符表示之间的差异。
WITH core AS
(SELECT t.*
FROM mhaods.stushh t
WHERE stus_cd IN ( 'DWRT', 'FINL', 'DWFL', 'DWR',
'DWSR', 'DWPC' )
AND stdt BETWEEN '2017-02-28' AND '2019-02-28'
UNION
SELECT g.*
FROM mhaods.stusha g
WHERE stus_cd IN ( 'DWRT', 'FINL', 'DWFL', 'DWR',
'DWSR', 'DWPC' )
AND stdt BETWEEN '2017-02-28' AND '2019-02-28'),
core1a AS
(SELECT p.*,
ROW_NUMBER()
OVER(
PARTITION BY asgnd_to_pin
ORDER BY stdt asc) AS RANK
FROM core p),
core1 AS
(SELECT asgnd_to_pin,
stus_cd,
stdt,
RANK,
( ( '2019-02-28' - stdt ) / 365 ) AS lngth_srvc_yrs,
(( '2019-02-28' - stdt )) AS lngth_srvc_days
FROM core1a
WHERE RANK = 1
AND asgnd_to_pin IN ( '788387' )
ORDER BY stdt)
SELECT asgnd_to_pin,
stdt,
lngth_srvc_yrs,
lngth_srvc_days
FROM core1
ORDER BY lngth_srvc_yrs
FETCH first 20 ROWS only;
随后是示例输出。从2017年3月3日到2019年2月28日有30多年的时间,共有11125天。
ASGND_TO_PIN STDT LNGTH_SRVC_YRS LNGTH_SRVC_DAYS
788387 3/3/2017 30.4794520 11125
259399 3/2/2017 30.4821917 11126
155851 3/2/2017 30.4821917 11126
304527 3/2/2017 30.4821917 11126
881853 3/1/2017 30.4849315 11127
144362 3/1/2017 30.4849315 11127
271562 2/28/2017 54.7945205 20000
618426 2/28/2017 54.7945205 20000
我还尝试了
((DATE('2019-02-28')-DATE(stdt))) as lngth_srvc_days
仍然有不好的结果
答案 0 :(得分:1)
两个日期之间的天差(返回5):
values days(date('2019-03-10')) - days(date('2019-03-05'))
请勿使用STDT BETWEEN '2017-02-28' AND '2019-02-28'
。
请改用STDT BETWEEN date('2017-02-28') AND date('2019-02-28')
。
答案 1 :(得分:0)
在LUW V11.1的Db2中,向武器库中添加了一些标量函数,包括DAYS_BETWEEN(first-datetime-expression,second-datetime-expression),MONTHS_BETWEEN,HOURS_BETWEEN以及其他类似类型的函数。