2017-06-01 5 views
-1

のCONCAT()とDATE_FORMAT()が異なる結果を返しましたCONCAT('2017-01-15', ' 00:00:00')を使用すると、MySQLでDATE_FORMAT('2017-01-15', ' %Y-%m-%d 00:00:00')を日付範囲用に使用した場合とは異なる結果になります。日付範囲が

例えば私のクエリは

SELECT SUM(payments) as pays 
FROM table 
WHERE employee_id = 25 
AND `date` >= DATE_FORMAT('2017-05-16', '%Y-%m-%d 00:00:00') 
AND `date` <= DATE_FORMAT('2017-05-31', '%Y-%m-%d 23:59:59') 
GROUP BY employee_id 
ORDER BY id DESC 

で、CONCAT

SELECT SUM(payments) as pays 
FROM table 
WHERE employee_id = 25 
AND `date` >= CONCAT('2017-05-16', ' 00:00:00') 
AND `date` <= CONCAT('2017-05-31', ' 23:59:59') 
GROUP BY employee_id 
ORDER BY id DESC 

との両方が異なる結果を与える。..

+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcveを参照してください私にとって非常にシンプルなSQLクエリ – Strawberry

+0

は、「日付」はテキストフィールドですか? – McNets

+0

日付はDATETIMEフィールドではありません –

答えて

0

私はちょうどあなたがフォーマット文字列Iの一流のスペースを持って気づきましたコピー貼り付け。これについて実際のクエリを再度確認してください。

[以下の無視]

それはいくつかの奇妙なキャストの問題である可能性があり、DATE_FORMAT(私がテストしていたサーバーでは)先頭にスペースが含まれることが表示されます。

これは、私はあなたが興味があるなら、この奇妙さを追跡するために使用されるクエリです:レスポンスのまいらのため

SELECT @t0 := '2017-01-15' AS t0, @tN := '2018-01-15' AS tN 
, @df0 := DATE_FORMAT(@t0, ' %Y-%m-%d 00:00:00') AS df0, @dfN := DATE_FORMAT(@tN, ' %Y-%m-%d 00:00:00') AS dfN 
, @ct0 := CONCAT(@t0, ' 00:00:00') AS ct0, @ctN := CONCAT(@tN, ' 23:59:59') AS ctN 
, @df0 = @ct0 AS eq0, @dfN = @ctN AS eqN 
, CAST(@ct0 AS DATETIME) = CAST(@df0 AS DATETIME) AS castsEqual0 
, @ct0 = CAST(@df0 AS DATETIME) AS castDF0Equal 
, CAST(@ct0 AS DATETIME) = @df0 AS castCT0Equal 
, @n := CAST(now() AS DATETIME) AS n 
, @n > @ct0 AS `n>ct0`, @n > @df0 AS `n>df0` 
, @n < @ctN AS `n<ctN`, @n < @dfN AS `n<dfN` 
, @n < CAST(@dfN AS DATETIME) AS `n<castDFN` 
, CAST(@n AS CHAR) < @dfN AS `castN<dfN` 
, LENGTH(CAST(@n AS CHAR)), LENGTH(@dfN) 
, CONCAT('[', @dfN, ']') 
; 
+0

先導する場所? –

+0

書式文字列です。 「%Y-%m-%d 00:00:00」は「%Y-%m-%d 00:00:00」でなければなりません。あなたの例では正しいように見えますが、あなたの質問にあなたが与えた初期のバージョンがあります。 – Uueerdo

+0

それはちょうど例だった.. –

0

おかげで、実際に私は23時23分59秒で問題があった:)それがなければなりませんでした23:59:59 :)何とか気付かなかった。 ありがとうございました -