2014-12-29 93 views
2
SELECT jour 
FROM reservations 
WHERE id_user = 57 AND SUBSTR(jour,10) = '2014_08_14' ORDER BY jour 

返回任何...SUBSTR返回任何記錄(MySQL的)

我有一個記錄,該codition相匹配的數據庫:

enter image description here

+0

'jour' col是什麼類型?它是否是一個字符串coloum或日期,日期時間,時間戳col? – bish

+0

是'jour'類型的字符串還是別的? –

+0

如果您有這樣的問題,只需在您的選擇中放入您調用的函數(即'substr')以驗證您是否執行了您想要的操作。 – evilive

回答

1

更換SUBSTR(jour,10)SUBSTR(jour,1,10)

假設:jourvarchar類型列。如果您將日期存儲爲varchar,則不要那麼做!

說明:我的解決方案使用SUBSTR函數的(str,pos,len)過載。參數2和3分別是起始位置和子串的長度。

Documentation

2

substr的第一個參數是位置從啓動。因此,SUBSTR(jour,10)返回_AM,您將得到一個空的結果集。相反,你應該用樹的說法變種:

SELECT jour 
FROM  reservations 
WHERE id_user = 57 AND 
     SUBSTR(jour, 1, 10) = '2014_08_14' -- Here 
ORDER BY jour 

爲了使您的查詢更具可讀性,並保證這樣的錯誤不再重演,你可以使用下面的變體:

SELECT jour 
FROM  reservations 
WHERE id_user = 57 AND 
     SUBSTR(jour FROM 1 FOR 10) = '2014_08_14' -- Here 
ORDER BY jour 
2

您還可以使用LEFT(str,len)功能或SUBSTR(str,pos,len)

試試這個:

SELECT jour 
FROM reservations 
WHERE id_user = 57 AND LEFT(jour, 10) = '2014_08_14' 
ORDER BY jour 

OR

SELECT jour 
FROM reservations 
WHERE id_user = 57 AND SUBSTR(jour, 1, 10) = '2014_08_14' 
ORDER BY jour 
2

如果選擇SUBSTR(怨婦,10)從保留你得到完全相同: '2014_08_14'?我相信你需要做SUBSTR(jour,1,10)。