2012-04-04 30 views
2

工作,我一直在使用LIKE結構問題DB2: 例如:爲什麼使用這樣帶有時間戳不DB2

select * from TEST where TIME LIKE '2012-03-04-%' 

僅供參考。 - TIMETIMESTAMP數據類型。

爲什麼使用LIKETIMESTAMPS不工作?

附加信息:我想從用戶的select語句提供一個單一的一天中提取數據。

+0

因爲時間戳不是字符串?如果你真的想像字符串一樣對待它們,可以將它們轉換爲字符串並指定所需的格式。但是對於這種類型的查詢,不要將時間戳轉換爲其他的東西,本地使用它 - 有很多函數和構造用於本地處理這種數據類型。不要像串線一樣對待它們。 – MatBailie 2012-04-04 12:37:07

回答

7

就擴大對@ mortb的答案,我想要麼使用BETWEEN

WHERE time >= '2012-03-04' AND time < '2012-03-05' 

優勢利用BETWEEN或比較,使用castsLIKE將意味着如果在time指數由於鑄造而無法使用。

+0

+1:不使用連續值的「BETWEEN」。用於不隱藏搜索字段的功能。並且不使用字符串操作來處理'TIMESTAMP'。爲什麼人們認爲每件事都是一個字符串!? – MatBailie 2012-04-04 12:40:44

+0

我猜想,當他們在第一時間的日期周圍加上''(引號)時,就開始出現混亂。在爲訪問數據庫編寫SQL時,可以使用#(#2012-04-04#)來代替常規字符串文字。這似乎更明確。 – mortb 2012-04-04 13:18:21

+0

@mortb - 日期周圍沒有引號。在你的查詢中你有兩個字符串常量。由於'TIMESTAMP> = STRING'是不可能的,所以一個或其他數據類型需要被隱式轉換爲另一個。根據數據類型的精度順序,字符串會隱式轉換爲TIMESTAMPs。就像您自己使用CAST()函數一樣。 – MatBailie 2012-04-04 13:32:03

3

LIKE爲字符串(CHAR,VARCHAR)的數據類型。使用WHERE time BETWEEN '2012-03-04' AND '2012-03-04 23:59:59.998'

+0

您的建議包含「2012-03-05」的一秒鐘,預計不會出現 – zerkms 2012-04-04 10:51:47

+0

或許在2012年4月3日至2012年4月23日23:59:59.998之間的時間會更好嗎? – mortb 2012-04-04 11:08:28

+2

@mortb:不,正確的答案是由beny23提供的答案。 – 2012-04-04 11:14:17

0

您可以像這樣使用其中time_to_date('2016-06-17 00:00:00','yyyy-mm-dd HH24:MI:SS')和to_date('2016-06-18 00:00:00' , 'YYYY-MM-DD HH24:MI:SS')