2011-08-12 56 views
2

我有一個插入查詢:Oracle在查詢中只從To_Date()獲取時間?

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'),這也不起作用,它仍然在表格中顯示日期和時間。

回答

2

如果您的字段是日期字段,您將始終擁有日期時間的日期部分。

您可以將其存儲爲其他內容,例如秒數並使用轉換函數將其轉換爲時間。由於它看起來像TO_CHAR將不會採取一個數字並將其轉換一次,您必須在應用程序端執行此操作。

所以我只是將它作爲DATE存儲以避免混淆;只是在使用時忽略日期部分。

順便說一下,這樣的:

我已經試過TO_CHAR(),但隨後轉換爲字符串和現場不會把它。

不完全正確,因爲正確格式的字符串會隱式轉換爲DATE s。

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'  
     )