2017-07-14 17 views
0

にMySQLでの変換のvarchar型Iは、(理由から)VARCHAR型を持つ「日付」という名前の列を持っていますが、店舗日付format-中(DMY H:I:S)与えられた日付形式

今私が持っていますBETWEENクエリを作成して2つの日付間のレコードを検索します。しかし、データ型はvarcharなので、まずカラムをdate-typeに変換して比較する必要があります。だから私はthis-

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

このクエリは正しくY-M-Dフォーマットに '日付' 列に変換しようとしました。しかし、比較される2つの日付は文字列( "2017-05-01"と "2017-05-31")として取得され、その結果は日付2017-05-20のレコードのみを返します。

日付型の列と指定した日付を比較するためのクエリは何ですか。

+1

str_to_dateを与えます関数呼び出しon日付は、どのように出力するかではなく、保存方法などの形式を使用する必要があります。 –

+1

'STR_TO_DATE(date、 '%Y-%m-%d')'の書式は 'd-m-Y H:i:s'の実際の書式の書式と一致させるべきです。 – Himal

+1

[this](https://dev.mysql.com/doc/refman/5.5/en/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')に変換しました。なぜdの代わりにeを使ったのですか?それともタイプミスですか? – GradDev

+0

はい、両方を使うことができます。 '%e'は日付を表すより正確な方法、つまり2桁の数字です。 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')