2017-06-01 47 views
-1

我有麻烦,当我使用CONCAT('2017-01-15', ' 00:00:00')它给了不同的结果,当我在MySQL中使用DATE_FORMAT('2017-01-15', ' %Y-%m-%d 00:00:00')日期范围..任何想法吗?CONCAT()和DATE_FORMAT()给出了不同的结果在MySQL的日期范围

例如我的查询是

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

我只注意到你在格式字符串中的前导空格我复制粘贴。仔细检查您的实际查询。

[以下否认]

它可能会出现一些奇怪的投放问题,看来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

感谢您的答复guyz,其实我有问题在23时23分59秒:)它必须是23:59:59 :)我没有注意到它在某种程度上.. 谢谢 - 问题解决了

相关问题