1

我这里有两个查询条件,我认为这些查询会产生相同的数据,但事实并非如此。

// 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'

我希望第一个条件产生与第二个条件相同的数据。

提前致谢。

4

3 回答 3

2
  1. 您的第一个版本包括jurnal.time = '2012-01-01',而您的第二个条件不包括(由于使用>而不是>=)。

  2. 从您的问题中不清楚该jurnal.time列的数据类型是什么:

    • 如果是DATETIMEor TIMESTAMP,则您的第二个示例将不会00:00:00在 6 月 30 日之后的任何时间包含在内,因此必须改为仅采用日期部分:

      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'
      
于 2012-07-07T18:24:46.523 回答
1

我推荐使用 CAST 的 BETWEEN 比较运算符:

WHERE jurnal.time BETWEEN CAST('2012-01-01' AS DATE) AND CAST ('2012-06-30' AS DATE)

确保将 stings 转换为与 jurnal.time 列相同的类型。

于 2012-07-07T18:01:06.653 回答
0

您在第一个查询中的条件试图比较它们是从日期解析函数返回的值的数字,但我认为它们只是字符串。'01' 和 '06' 被 sql 插入为纯字符串,而不是数字 1 和 6。

第二个是 sql 足够聪明,可以将完整的日期字符串表示形式转换为用于比较的日期。

于 2012-07-07T18:02:30.390 回答