我正在使用以下查询:
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开始我什么都没得到。
答案 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本机的DATE
和DATETIME
类型,并避免进行字符串比较。
如果将initial_date
列定义为DATE
或DATETIME
数据类型,则在查询中指定 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
(请注意,第二个参数是格式模型;字符串将根据该模型进行解释。)