我在这里有两个查询条件,我认为这些查询会产生相同的数据,但它们不会。
// 1st Condition:
WHERE month(jurnal.time) >= '01'
AND month(jurnal.time) <= '06'
AND year(jurnal.time) = '2012'
// 2nd Condition:
WHERE jurnal.time > '2012-01-01'
AND jurnal.time <= '2012-06-30'
我希望第一个条件产生与第二个条件相同的数据。
提前致谢。
答案 0 :(得分:2)
您的第一个版本包含jurnal.time = '2012-01-01'
,而您的第二个版本不包括(由于使用>
而不是>=
)。
从您的问题中不清楚jurnal.time
列的数据类型是什么:
如果是DATETIME
或TIMESTAMP
,则您的第二个示例将不会包含在6月30日00:00:00
之后的任何时间,因此必须只选择日期部分:< / p>
WHERE DATE(jurnal.time) BETWEEN '2012-01-01' AND '2012-06-30'
或确保比较包括当天的所有时间:
WHERE jurnal.time BETWEEN '2012-01-01 00:00:00' AND '2012-06-30 23:59:59'
如果它是DATE
,这一点不会影响您的示例,但可以简化您的第二个示例:
WHERE jurnal.time BETWEEN '2012-01-01' AND '2012-06-30'
答案 1 :(得分:1)
我推荐使用BETWEEN比较运算符和CAST:
WHERE jurnal.time BETWEEN CAST('2012-01-01' AS DATE) AND CAST ('2012-06-30' AS DATE)
确保将stings转换为与jurnal.time列相同的类型。
答案 2 :(得分:0)
你在第一个查询中的条件是试图比较它们是数字从日期解析函数返回的值,但我认为它们只是字符串。 '01'和'06'由sql作为普通字符串,而不是数字1和6。
第二个是sql非常聪明,可以将完整日期字符串表示转换为比较中使用的日期。