我有一个插入查询:
INSERT INTO THE_TABLE (Field_A)
VALUES (TO_DATE('08/12/2011 08:35:42 AM','HH:MI:SS PM'))
WHERE Something = 'SomethingElse'
Field_A是日期字段。当我执行查询时,Field_A仍显示日期和时间。
有没有办法只抓住时间?
我尝试过To_Char(),但后来转换为字符串,字段不会接受它。
我也曾尝试过TO_DATE('08:35:42 AM','HH:MI:SS PM')但这也不起作用,它仍然在表格中显示日期和时间。
答案 0 :(得分:3)
TO_DATE('08:35:42 AM','HH:MI:SS PM')
这不起作用的原因是因为这不是一个完整的日期。即使您使用to_date('07 / 12/2011','MM / DD / YYYY'),Oracle也会存储日期和时间,但会使时间的所有组成部分为零。所以存储的实际日期是07/12/2011 HH:MI:SS
如果要单独存储时间组件,它应该是varchar字段,您需要将其添加到日期部分以获取完整日期。实施例..
Select to_date(
to_char(date_field_stored_as_date,'DD-MON-YYYY') ||
' ' ||
to_char(time_field_stored_as_varchar),
'DD-MON-YYYY HH24:MI:SS'
)
答案 1 :(得分:2)
如果您的字段是日期字段,则您将始终拥有日期时间的日期部分。
您可以将其存储为其他内容,例如秒数,并使用转换函数将其转换为时间。由于似乎TO_CHAR
不会接受数字并将其转换为时间,因此您必须在应用程序端执行此操作。
所以我只是将其存储为DATE
以避免混淆;使用它时只需忽略日期部分。
顺便说一下,这个:
我尝试过To_Char(),但后来转换为字符串,字段不会接受它。
不太正确,因为正确格式的字符串会隐式转换为DATE
s。