【问题标题】:Update issue when using STR_TO_DATE使用 STR_TO_DATE 时的更新问题
【发布时间】:2015-09-12 00:01:33
【问题描述】:

MySQL 数据库有Blogs 表,其中列PostDateErrorMessage。两者都是字符串数据类型。

现在我需要应用验证,如果 PostDatenull、空白、0000-00-00 或“无法解析”,则应更新错误消息。

我的查询如下:-

UPDATE Blogs
SET ErrorMessage= 'Post date is Invalid.'
WHERE PostDate IS NULL OR PostDate = '' 
OR PostDate= '0000-00-00' OR  STR_TO_DATE(PostDate, '%Y-%m-%d') IS NULL;

现在,如果 postdate 包含任何字符串,如 '16mar' 或 'Abc' 等,此查询将失败。但我听说 STR_TO_DATE 函数如果无法解析日期,将返回 null。 我也使用Select 语句对此进行了测试。哪个工作正常。

SELECT *,STR_TO_DATE(PostDate, '%Y-%m-%d') FROM Blogs
WHERE PostDate IS NULL OR PostDate = '' 
OR PostDate= '0000-00-00' OR STR_TO_DATE(PostDate, '%Y-%m-%d') IS NULL;

我无法理解更新语句中的问题

更新:--我在更新时遇到的错误是:- 错误代码:1411。日期时间值不正确:函数 str_to_date 的“16mar”

【问题讨论】:

  • 将 PostDate 的数据类型更改为 'date' 或 'timestamp'
  • 分享你得到的错误。
  • 错误代码:1411。日期时间值不正确:函数 str_to_date 的“IN VALID POST DATE”
  • @SantoshJagtap PostDate 将作为字符串提供,因为它来自受第 3 方监控的 URL。我们将其转储到我们的数据库中,并在验证后将其放入邮件表中
  • @iGod 将一条记录的日期设置为 0000-01-00 并对其应用选择查询。并请分享结果。

标签: php mysql sql asp.net database


【解决方案1】:

我在朋友的帮助下解决了这个问题。因为我希望日期总是以特殊格式(YYYY-DD-MM)出现,所以我们使用了正则表达式。

UPDATE blogs
    SET ErrorMessage= 'Post date is invalid'
WHERE   (PostDate is null) 
    OR  (PostDate NOT REGEXP '^[1,2][0-9]{3}-[0-9]{2}-[0-9]{2}$');

这帮助我解决了我的问题,但问题仍未得到解答。

【讨论】:

    猜你喜欢
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    相关资源
    最近更新 更多