【问题标题】:Convert varchar column to date in mysql at database level在数据库级别将 varchar 列转换为 mysql 中的日期
【发布时间】:2012-12-31 22:17:03
【问题描述】:

我有一列 date1 这是 varchar 类型 我希望此专栏为date 类型。 我尝试更改字段,但所有日期都转换为0000-00-00。 格式为 dd-mm-yyyy,但在 varchar 中。

如何使用 sql 查询或类似但在数据库级别转换相同的日期格式但具有日期格式?

【问题讨论】:

标签: mysql


【解决方案1】:
UPDATE `table`
SET `column` = str_to_date( `column`, '%d-%m-%Y' );

更多关于STR_TO_DATE函数。


由于您的列名是date1,您可以将上述语法中的column替换为date1,代码为:

UPDATE `table`
SET `date1` = str_to_date( `date1`, '%d-%m-%Y' );

【讨论】:

  • 列类型不会还是VARCHAR吗?
  • @Brian OP 提到他们尝试更改损坏数据的列类型。我建议在更改列类型之前保留数据的方法。
【解决方案2】:

使用STR_TO_DATE MySQL的函数

首先,您需要更新日期格式的值。

UPDATE `tbl` SET `date1` = STR_TO_DATE(`date1`, '%d-%m-%Y') WHERE 1=1

THEN 将字段转换为日期。

最重要的是记得在之后以 Y-m-d 格式插入日期。

【讨论】:

    【解决方案3】:

    这里的其他答案是有风险的,因为如果它们出错,您将丢失数据。一种更安全的方法是在数据库上创建一个具有 DATE(或 DATETIME,如果您也需要时间)格式的新字段,然后运行类似

    的查询
    UPDATE `table` SET `my_new_date_field` = STR_TO_DATE( `my_old_data_field`, '%d/%m/%Y');
    

    这样,如果%d/%m/%Y位错了,你的数据不会丢失。

    一旦您满意,您可以删除旧数据字段并重命名新字段。

    【讨论】:

    • 我相信这是从一种列数据类型转换为另一种列数据类型时最安全的途径。复制到新列 --> 转换新列的数据类型。
    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2017-06-02
    相关资源
    最近更新 更多