如何将时间戳转换为日期?在Oracle SQL中将日期转换为时间戳
表中有一个字段,start_ts
这是timestamp
格式:
'05/13/2016 4:58:11.123456 PM'
我需要查询表,并找出最大和最小的表timestamp
,但我不能。
Select max(start_ts)
from db
where cast(start_ts as date) = '13-may-2016'
但查询没有返回任何值。
请帮我找到日期的最大时间戳。
如何将时间戳转换为日期?在Oracle SQL中将日期转换为时间戳
表中有一个字段,start_ts
这是timestamp
格式:
'05/13/2016 4:58:11.123456 PM'
我需要查询表,并找出最大和最小的表timestamp
,但我不能。
Select max(start_ts)
from db
where cast(start_ts as date) = '13-may-2016'
但查询没有返回任何值。
请帮我找到日期的最大时间戳。
尝试使用TRUNC
和TO_DATE
代替
WHERE
TRUNC(start_ts) = TO_DATE('2016-05-13', 'YYYY-MM-DD')
或者,你可以使用>=
和<
来避免在start_ts
柱使用的功能:
WHERE
start_ts >= TO_DATE('2016-05-13', 'YYYY-MM-DD')
AND start_ts < TO_DATE('2016-05-14', 'YYYY-MM-DD')
我试过使用这个,但由于时间戳包含AM/PM与毫秒,它不返回任何值。 – Dinu
使用这种格式,而选择
to_char(systimestamp,'DD-MON-YYYY')
例如:
从dual中选择to_char(systimestamp,'DD-MON-YYYY');
这可能不是正确的做法。但我已经使用子字符串函数解决了这个问题。
Select max(start_ts), min(start_ts)from db where SUBSTR(start_ts, 0,9) ='13-may-2016'
使用此我能够检索最大和最小时间戳。
如果数据类型是时间戳,那么可见格式是不相关的。
您应该避免将数据转换为日期或使用to_char。相反,比较使用TO_TIMESTAMP()的时间戳数据的时间戳值
WHERE start_ts >= TO_TIMESTAMP('2016-05-13', 'YYYY-MM-DD')
AND start_ts < TO_TIMESTAMP('2016-05-14', 'YYYY-MM-DD')
CAST(timestamp_expression AS DATE)
例如,查询是:SELECT CAST(SYSTIMESTAMP AS DATE) FROM dual;
见的许多其他问题,一个关于日期比较时间戳,如这一个:http://stackoverflow.com/questions/30519823/compare-date-in-sql-command – Turophile
_real_ timestamp列没有“格式”。你为什么把它存储为一个字符串? –