我在我的数据库表中有一个时间戳(6)列。我想对其进行比较,但不考虑秒部分。我知道可以使用trunc(timestamp)来删除时间并保留日期部分。是否有一种方法可以将秒设置为0?
我想要这样做:
CASE WHEN ARR NOT BETWEEN FROM AND TO THEN 1
ELSE 0 END "mismatch"
但是当ARR
的秒数大于FROM
和TO
的秒数时,会出现不匹配的情况。我不关心秒数,只想考虑分钟。
非常感谢任何建议。
谢谢
trunc()
函数允许您通过可选的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
00:00:00
,还是你的 NLS_DATE_FORMAT
隐藏了日期部分?你可以使用 to_char()
来显示时间,但为了比较,请将其保留为日期。 - Alex Poole
trunc(timestamp * 24 * 60)
怎么样? - Guntram Blohm