如何在mysql查询的where子句中检查存储在varchar字段中的日期是否是有效日期?

时间:2018-08-28 09:47:30

标签: php mysql

我想根据日期字段值更新mysql表中的数据。

表包含四个字段(id,file_id,date_of_purchase,错误)。 date_of_purchase和error是varchar字段。

现在,如果日期中的值不是有效日期,我想更新错误字段。我尝试使用STR_TO_DATE()函数,但在where clause

中的update query中不起作用

这是我的查询

UPDATE `temp_bulk_upload_data` SET `error`= 'Date of purchase: Date of purchase should be a valid date' WHERE `file_id`='190' AND STR_TO_DATE(`date_of_purchase`, '%m/%d/%Y') IS NULL AND (`date_of_purchase` != '' OR `date_of_purchase` IS NOT NULL)

在此查询中,我收到此错误:

Error in query (1411): Incorrect datetime value: '27/8/2018' for function str_to_date

2 个答案:

答案 0 :(得分:1)

在这种情况下,使用正则表达式。 查询

WHERE `date_of_purchase` NOT REGEXP '^(0[1-9]|1[0-2])\\/(0[1-9]|[1-2][0-9]|3[0-1])\\/[0-9]{4}$'

答案 1 :(得分:0)

STR_TO_DATE传递的值应为mmddYYYY格式,或更新STR_TO_DATE函数的第二个参数以接受ddmmYYYY格式的日期值。

UPDATE `temp_bulk_upload_data` SET `error`= 'Date of purchase: Date of purchase should be a valid date' WHERE `file_id`='190' AND STR_TO_DATE(`date_of_purchase`, '%d/%m/%Y') IS NULL AND (`date_of_purchase` != '' OR `date_of_purchase` IS NOT NULL)