为什么在找不到结束日期之间

时间:2019-04-15 14:27:14

标签: mysql

我正在使用以下查询:

SELECT * 
FROM vaccines 
WHERE (initial_date BETWEEN '1/1/2018' AND '10/31/2018') 
  AND customer_id='110607' 
  AND item_description= 'FLUZONE .QUAD MDV';

我没有结果,并且有该日期范围的条目,但是结果显示一直显示到第9个月,从10 -12开始我什么都没得到。

2 个答案:

答案 0 :(得分:0)

尝试

SELECT * 
FROM vaccines 
WHERE (initial_date BETWEEN CAST('2018-01-01' AS DATE) AND CAST('2018-10-31' AS DATE)) 
  AND customer_id='110607' 
  AND item_description= 'FLUZONE .QUAD MDV';

答案 1 :(得分:0)

问:为什么还没找到结束日期?

A:可能是因为MySQL在做 string 比较;比较 string 值而不是 date 值。

如果我们要比较 strings ,请注意,任何以'9'开头的字符串 将大于以'1'开头的字符串。

'9........'  is greater than '1........'

同样

'9/23/1999'  is greater than '10/31/2001'

即使我们包含前导零,并以 strings 作为比较,我们在比较年份时仍然会遇到问题:

'09/23/2018'  is less than   '10/31/2001'
       ^^^^                         ^^^^ 

如果我们想利用MySQL的功能来比较日期和日期时间值,则可以使用MySQL本机的DATEDATETIME类型,并避免进行字符串比较。

如果将initial_date列定义为DATEDATETIME数据类型,则在查询中指定 date 值,例如

 WHERE initial_date >= '2018-01-01' + INTERVAL 0 DAY 
   AND initial_date  < '2018-11-01' + INTERVAL 0 DAY

(注意:MySQL日期文字可以表示为'YYYY-MM-DD'。)


如果将initial_date列定义为字符串类型(例如CHAR或VARCHAR),则可以使用STR_TO_DATE函数将字符串值转换为 date 值,例如< / p>

 WHERE STR_TO_DATE(initial_date,'mm/dd/yyyy') >= '2018-01-01' + INTERVAL 0 DAY 
   AND STR_TO_DATE(initial_date,'mm/dd/yyyy')  < '2018-11-01' + INTERVAL 0 DAY

(请注意,第二个参数是格式模型;字符串将根据该模型进行解释。)