Php 如何在mysql查询的where子句中检查存储在varchar字段中的日期是否有效?
我想根据日期字段值更新mysql表中的数据 表由四个字段组成(id、文件id、购买日期、错误)。购买日期和错误是varchar字段 现在,如果date中的值不是有效日期,我想更新错误字段。我尝试了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'
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我查过了。这是另一件我不想用于循环的事情。我想在单个查询中完成它,但这就是我想检查它的格式是否正确的原因。这是我尝试过的一种方法。