2017-07-04 90 views
0

我有SQL查詢簡單的問題..我想搜索字段,其中日期開始和結束於特定的日期和時間。SQL - 與日期字符字段 - 如何在兩個日期之間搜索

字段被定義爲CHAR並且具有結構:DD.MM.YYYY hh:mm:ss並且我無法更改它。

我試圖聲明一些變量,並通過此搜索,也嘗試通過轉換。

這是我嘗試和沒有工作:

SELECT date FROM table WHERE date BETWEEN '1.01.2017 00:00:00' AND '1.02.2017 23:59:59' 

SELECT date FROM table WHERE date >= '1.01.2017 00:00:00' AND date <= '1.02.2017 00:00:00' 

SELECT date FROM table WHERE date >= Convert(DATETIME, '1.01.2017', 104) AND date <= Convert(DATETIME, '1.02.2017', 104) 

總是這個查詢我得到的所有日期,而不是該我問了。

+1

您的第三個查詢幾乎是正確的,您只需將日期列轉換爲'datetime'數據類型即可。 – HoneyBadger

+0

最後一個查詢中的'104'是什麼? 'CONVERT'的參數是'(expression,type)'。 – Barmar

+1

存儲日期作爲日期 – Strawberry

回答

0

我解決了我的問題。問題在於如何將這些字段存儲在數據庫中。 我以爲他們的存儲是這樣的:DD.MM.YYYY hh:mm:ss,但它只是結構。在數據庫中,它們的存儲方式如下所示:YYYYMMDDhhmmss,並在WHERE查詢行中發生更改後生效。

SELECT date FROM table WHERE date >= '20170101000000' AND date <= '201701' 
-1
SELECT date FROM table WHERE STR_TO_DATE(date, '%d.%m.%Y %H:%i:%s') BETWEEN '2017-01-01 00:00:00' AND '2017-02-01 23:59:59' 

OR

可以使用STR_TO_DATE()功能。

SELECT date FROM table WHERE STR_TO_DATE(date, '%d.%m.%Y %H:%i:%s') BETWEEN STR_TO_DATE('1.01.2017 00:00:00','%d.%m.%Y %H:%i:%s') AND STR_TO_DATE('1.02.2017 23:59:59','%d.%m.%Y %H:%i:%s') 

您可以嘗試以上查詢。 希望這會幫助你。

+0

'date'不是'DATETIME',它是'CHAR',所以這將執行字符串比較,而不是日期比較。 – Barmar

+0

@Barmar,我糾正。 –

+0

dv只是兩次說同樣的事情 – Strawberry

0

您的字段不是可以按字母順序作爲字符串進行比較的格式,因此您需要將其轉換爲日期。但它不是MySQL可以默認解析的格式(它預計格式爲YYYY-MM-DD)。因此請使用STR_TO_DATE()以格式字符串解析它。

SELECT date 
FROM table 
WHERE STR_TO_DATE(date, '%d.%m.%Y %H:%i:%s') BETWEEN '2017-01-01 00:00' AND '2017-01-02 23:59:59' 
+0

因爲'24小時制'格式,'%H'不是'%h'。 –

+0

是的。把鋼琴移到凳子上 – Strawberry

相關問題