我的数据库中的表中有一个timestamp(6)列。我想对它做一个比较,但不考虑秒部分。我知道我可以截断(时间戳)来删除时间并保留日期部分。有没有办法可以将秒数设置为0?
我想这样做
CASE
WHEN ARR NOT BETWEEN FROM AND TO THEN 1
ELSE 0
END "mismatch"
但是当arr的秒部分大于FROM和TO时会出现不匹配。我不在乎秒,只想考虑分钟。
任何建议都非常感谢。
由于
答案 0 :(得分:12)
trunc()
function允许您通过可选的fmt
参数决定丢弃多少精度;默认设置是删除所有时间组件,即相当于trunc(x, 'DD')
。如果您只想丢失秒数,可以使用MI
:
select systimestamp, trunc(systimestamp, 'MI') from dual;
SYSTIMESTAMP TRUNC(SYSTIMESTAMP,'MI')
----------------------------------- ------------------------
06-JAN-14 13.11.33.046920000 +00:00 2014-01-06 13:11:00
请注意,trunc
返回的值现在为DATE
,而不是TIMESTAMP
。如果这是一个问题 - 可能不是 - 你可以把它丢回来:
select systimestamp, cast (trunc(systimestamp, 'MI') as timestamp) from dual;
SYSTIMESTAMP CAST(TRUNC(SYSTIMESTAMP,'MI')ASTIMESTAMP)
----------------------------------- -----------------------------------------
06-JAN-14 13.14.43.270506000 +00:00 2014-01-06 13:14:00.000