Это работает, как задумано.
'2019-03-31' == timestamp('2019-03-31-00.00.00')
Если вы действительно не хотите использовать <
(знак <
запрещен в вашей организации? :)), попробуйте следующее:
reportdate <= timestamp('2019-03-31-23.59.59.999999999999', 12)
Кстати, в Db2 есть интересная вещь с метками времени:
with t(row, ts) as (values
(1, timestamp('2019-03-31-23.59.59.999999999999', 12))
, (2, timestamp('2019-04-01-00.00.00', 12) - 0.000000000001 second)
, (3, timestamp('2019-03-31-24.00.00', 12))
, (4, timestamp('2019-03-31-23.59.59.999999999999', 12) + 0.000000000001 second)
, (5, timestamp('2019-04-01-00.00.00', 12))
)
select row, ts, dense_rank() over (order by ts) order
from t;
ROW TS ORDER
----------- -------------------------------- --------------------
1 2019-03-31-23.59.59.999999999999 1
2 2019-03-31-23.59.59.999999999999 1
3 2019-03-31-24.00.00.000000000000 2
4 2019-04-01-00.00.00.000000000000 3
5 2019-04-01-00.00.00.000000000000 3
2019-03-31-24.00.00
- это «специальная» метка времени (с частью времени 24:00:00
).
Это больше, чем любая 2019-03-31-xx
отметка времени, но меньше, чем 2019-04-01-00.00.00
.
Так что, как упоминал Пол, вы можете использовать reportdate <= '2019-03-31-24.00.00'
вместо reportdate <= timestamp('2019-03-31-23.59.59.999999999999', 12)
.
Обратите внимание, что мы должны указатьдоля дробных секунд (12) явно в последнем случае.В противном случае метка времени преобразуется в метку времени (6) с усечением данных.