2017-07-14 99 views
0

我有一個名爲「日期」列其類型爲VARCHAR(原因),但將日期存儲的格式 - (DMY H:I:S)轉換爲varchar在MySQL中給定的日期格式

現在我有做一個BETWEEN查詢來查找兩個日期之間的記錄。但是因爲數據類型是varchar,我首先必須將該列轉換爲日期類型然後進行比較。所以我試過了 -

SELECT 
     mobile, 
     STR_TO_DATE(date,'%Y-%m-%d') 
    FROM register 
    WHERE STR_TO_DATE(date,'%Y-%m-%d') 
    BETWEEN STR_TO_DATE('2017-05-01','%Y-%m-%d') AND 
    STR_TO_DATE('2017-05-31','%Y-%m-%d') 

這個查詢將'date'列正確地轉換成Y-m-d格式。但是,比較的兩個日期被視爲字符串(「2017-05-01」和「2017-05-31」),結果僅返回2017-05-20日期的記錄。

查詢應該是什麼,以便比較日期類型中的列和給定日期?

+1

的STR_TO_DATE函數調用日期應該使用一種格式,比如它如何存儲,而不是你想要輸出的格式。 –

+1

您應該在這裏將您的格式與'd-m-Y H:i:s'的實際內容格式'STR_TO_DATE(日期,'%Y-%m-%d')'匹配。 – Himal

+1

查看[this](https://dev.mysql.com/doc/refman/5.5/zh-CN/date-and-time-functions.html#function_str-to-date) –

回答

1
STR_TO_DATE('DateString', '%e %m %Y %H:%i:%s') 

OR

STR_TO_DATE('DateString', '%d %m %Y %H:%i:%s') 
+0

將其轉換爲('%d-%m-%Y%H:%i:%s')工作。你爲什麼用e而不是d?還是它是一個錯字? – GradDev

+0

是的,你可以同時使用,'%e'是代表日期的更精確的方式,即兩位數字。 PS:你可以通過接受答案向社區表達你的感激之情。 –

+0

只是在等待e的澄清! ;-) – GradDev

1

投其所好格式字符串您存儲如何:

SELECT 
    mobile, 
    STR_TO_DATE(date,'%Y-%m-%d') 
FROM register 
WHERE STR_TO_DATE(date,'%d-%m-%Y') 
BETWEEN STR_TO_DATE('2017-05-01','%Y-%m-%d') AND 
STR_TO_DATE('2017-05-31','%Y-%m-%d') 
0

該查詢給你想要的東西

SELECT 
    user_id, 
    STR_TO_DATE(date,'%d-%m-%Y') 
FROM register 
WHERE STR_TO_DATE(date,'%d-%m-%Y') 
BETWEEN STR_TO_DATE('05-01-2015','%d-%m-%Y') AND 
STR_TO_DATE('31-05-2017','%d-%m-%Y') 
相關問題