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

Php 如何在mysql查询的where子句中检查存储在varchar字段中的日期是否有效?,php,mysql,Php,Mysql,我想根据日期字段值更新mysql表中的数据 表由四个字段组成(id、文件id、购买日期、错误)。购买日期和错误是varchar字段 现在,如果date中的值不是有效日期,我想更新错误字段。我尝试了STR\u TO\u DATE()函数,但它在更新查询中的where子句中不起作用 这是我的问题 UPDATE `temp_bulk_upload_data` SET `error`= 'Date of purchase: Date of purchase should be a valid date'

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

表由四个字段组成(id、文件id、购买日期、错误)。购买日期和错误是varchar字段

现在,如果date中的值不是有效日期,我想更新错误字段。我尝试了
STR\u TO\u DATE()
函数,但它在
更新查询中的
where子句中不起作用

这是我的问题

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

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)

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

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}$' 其中`购买日期`非REGEXP'^(0[1-9]| 1[0-2])\\/(0[1-9]|[1-2][0-9]| 3[0-1])\\/[0-9]{4}$'
您不应该使用VARCHAR字段来存储日期值。@misorude我知道,但它已经存在于数据中。可能重复:“但它已经存在于数据中”您可以更改it@MickaelLeger我查过了。这是另一件我不想用于循环的事情。我想在单个查询中完成它,但这就是我想检查它的格式是否正确的原因。这是我尝试过的一种方法。