MySQL是否提供验证日期有效性的任何功能?例如,在提供无效日期2013-02-30时,DATE函数返回NULL.但是,我也同时使用STR_TO_DATE,这会神秘地阻止DATE正常工作.
SELECT DATE('2013-02-30'); NULL
SELECT STR_TO_DATE('2013-02-30', '%Y-%m-%d'); NOT NULL
SELECT DATE('2013-02-40'); NULL
SELECT STR_TO_DATE('2013-02-40', '%Y-%m-%d'); NULL
SELECT DATE(STR_TO_DATE('2013-02-30', '%Y-%m-%d')); NOT NULL
为什么STR_TO_DATE会暂停DATE的功能,是否有一些解决方法可以在使用STR_TO_DATE(我有义务使用)时验证日期是否有效?
我在此期间偶然发现了答案:当数据类型已经是’date'(STR_TO_DATE将字符串转换为日期数据类型)时,显然DATE函数会跳过一些验证检查.因此,在使用STR_TO_DATE将日期解析为正确的格式后,将日期转换为字符串,可以解决问题:
@valid_date = NOT ISNULL(DATE(CONVERT(STR_TO_DATE(‘2013-02-29′,’%Y-%m-%d’),CHAR))).
|