【问题标题】:Rearrange date format in SQL using REGEXP_REPLACE使用 REGEXP_REPLACE 在 SQL 中重新排列日期格式
【发布时间】:2021-02-08 17:55:38
【问题描述】:

我的数据库中有日期格式为YYYY-DD-MM 的activation_date 列。 我需要将所有值替换为以下格式YYYY-MM-DD。 这是我迄今为止尝试过的,但它没有改变任何东西。

SELECT REGEXP_REPLACE(activation_date, '^(\d{2})-(\d{2})-(\d{2})$', '\\1-\\3-\\2') FROM 
Warranties WHERE activation_date != ''

【问题讨论】:

  • activation_date的数据类型是什么?
  • 定义为字符串
  • 在插入数据时,通常最好转换为 DATE 或 DATETIME。

标签: sql regex mariadb


【解决方案1】:

我最终连接了字符串的各个部分,因为所有格式化函数都不适用于字符串。代码如下:

UPDATE Warranties SET activation_date = concat(SUBSTRING(activation_date,1,4),'-',SUBSTRING(activation_date,9,2),'-',SUBSTRING(activation_date,6,2)) WHERE activation_date != ''

【讨论】:

    【解决方案2】:

    YYYY 有四个字符,但您使用了\d{2}。您只需将\d{2} 替换为\d{4}

    ^(\d{4})-(\d{2})-(\d{2})$
    

    Demo

    【讨论】:

      【解决方案3】:

      使用str_to_date():

      select str_to_date(activation_date, '%Y-%d-%m')
      

      这会返回一个日期。我认为没有理由将其转换回字符串。

      【讨论】:

        猜你喜欢
        • 2020-11-23
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 2021-10-14
        • 1970-01-01
        • 1970-01-01
        • 2018-02-11
        • 2019-12-25
        相关资源
        最近更新 更多