2017-01-02 4 views
1
SELECT * FROM `incomes` WHERE incomeDate BETWEEN '28-12-2016' and '31-01-2017' 

このクエリは動作しない機能しませんが、私は、クエリの下に行うと、それはSQL正しく

SELECT * FROM `incomes` WHERE incomeDate BETWEEN '28-12-2016' and '31-12-2016' 
+1

...「incomeDate」列のデータ型は?これは 'DATE'または' VARCHAR'として宣言されていますか?フォーマットdd-mm-yyyyの文字列リテラルは、標準ではないことに注意してください。文字列の比較は左から右の文字単位で行われます。つまり、'29 -07-1999 'の文字列値は2つの文字列リテラルの間にありますが、*日付*を表すために取られますが、日付はそうではありません。 – spencer7593

答えて

2

結果を示し、日付形式を変更comparionでのMySQLのサポート「YYYY-MM-DD」日付ギください。以下のクエリを使用してください。

SELECT * FROM incomes WHERE incomeDate BETWEEN '2016-12-28' and '2017-01-31'. 

希望すると、これが役立ちます。

0

日付列と(2)文字列リテラルを比較しています。ここで何が起こるかは、日付が文字列に変換され、辞書的に比較されます。代わりに、文字列を日付に明示的に変換して日付順に比較する必要があります。

SELECT * 
FROM incomes 
WHERE incomeDate BETWEEN STR_TO_DATE('28-12-2016', '%d-%m-%Y') AND 
          STR_TO_DATE('31-01-2017', '%d-%m-%Y') 
+0

さて、それは常に辞書編集の比較です! – Strawberry

関連する問題