2017-07-04 28 views
0

SQL問合せには簡単な問題があります。日付の開始日と終了日を指定するフィールドを検索したいと思います。日付付きのchar型フィールド - 2つの日付間の検索方法

フィールドは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

3番目のクエリはほぼ正確です。日付列を 'datetime'データ型にキャストするだけで済みます。 – HoneyBadger

+0

最後のクエリで '104'とは何ですか? 'CONVERT'への引数は'(expression、type) 'です。 – Barmar

+1

日付を日付として格納する – Strawberry

答えて

0

私は私の問題を解決しました。問題は、このフィールドがDBに格納されていることです。 私は彼らがDD.MM.YYYY hh:mm:ssのようなストレージだと思っていましたが、それは構造だけでした。 DBでは、それらは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

'%H 'は'%h'ではなく '24時間 '形式です。 –

+0

はい。ピアノをスツールに移動する – Strawberry

関連する問題