【问题标题】:How to check if date stored in varchar field is a valid date or not in where clause of mysql query?如何检查存储在varchar字段中的日期是否是mysql查询的where子句中的有效日期?
【发布时间】:2019-02-02 21:49:54
【问题描述】:

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

表由四个字段(id、file_id、date_of_purchase、error)组成。 date_of_purchase 和 error 是 varchar 字段。

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

这是我的查询

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

【问题讨论】:

  • 您不应该使用 VARCHAR 字段来存储日期值。
  • @misorude 我知道,但它已经存在于数据中。
  • "但它已经存在于数据中" 你可以更改它
  • @MickaelLeger 我查过了。这是我不想使用 for 循环的不同之处。我想在单个查询中完成。

标签: php mysql


【解决方案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}$'

【讨论】:

    【解决方案2】:

    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)
    

    【讨论】:

    • 但这就是我想检查的,它的格式是否正确。这是我尝试过的一种方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2021-12-18
    • 1970-01-01
    • 2012-04-16
    • 2020-01-24
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多