【问题标题】:Convert column data type from VARCHAR to DATE in MySQL?在 MySQL 中将列数据类型从 VARCHAR 转换为 DATE?
【发布时间】:2019-08-17 14:36:36
【问题描述】:

我有一个 VARCHAR 数据类型的列,它的日期(值)为字符串,如 dd/mm/yyyy

我想将其数据类型更改为 DATE 并希望在尝试执行此操作时保留输入的日期(值),例如:

ALTER TABLE t1 MODIFY col1 DATE;

我丢失了字符串,值被转换为 0000.00.00

如何在不丢失数据的情况下更改列数据类型。

【问题讨论】:

  • 请添加一些示例数据,显示文本日期值的样子。没有看到这一点,我们无法为您提供帮助。

标签: mysql


【解决方案1】:

我愿意,

  1. 添加临时列
ALTER TABLE t1 ADD temp_date DATE;
  1. 更新这个时间列,将值CAST('2000-01-01' AS DATE)
UPDATE t1 SET temp_date=CAST(yourvarcharcol AS DATE) WHERE 1;
  1. 更新原来的列类型
ALTER TABLE t1 MODIFY yourvarcharcol DATE;
  1. 用临时列更新原始列。
UPDATE t1 SET yourvarcharcol=temp_date WHERE 1;
  1. 删除时间列
ALTER TABLE t1 DROP COLUMN temp_date

【讨论】:

  • 你用的是什么版本的mysql?
  • thankx @Erubiel 它的工作,但我仍然面临在 myvarchar 列中我的值格式类似于 27/03/2019 的问题。
  • 搜索 DATE_FORMAT 函数示例并使用它来更新您的列
【解决方案2】:

当我遇到这个问题时,我用两个临时列来解决它,以免丢失主要值,这与 Erubiel 的答案非常相似。

表 T1;原始列“myvarchar”

1.- 插入新列

ALTER TABLE T1 ADD Temp_ColDate1 VARCHAR;
ALTER TABLE T1 ADD Temp_ColDate2 DATE;

2.- 在添加的第一列中,根据 DATE 形式放置剪切和武装值,但在 VARCHART 列中

UPDATE  T1  SET Temp_ColDate1 = (SELECT CONCAT((SELECT RIGHT(myvarchar, 4)),(SELECT MID(myvarchar, 4, 2)),(SELECT LEFT(myvarchar, 2))))  WHERE 1=1;

3.- 然后将临时列 2 中的值从 VARCHAR 转换为 DATE

UPDATE  T1  SET Temp_ColDate2 = (SELECT CONVERT(Temp_ColDate1, DATE))  WHERE 1=1;

4.- 删除临时列 1

ALTER TABLE T1 DROP COLUMN Temp_ColDate1;

5.- 请记住,您在 Temp_ColDate1 中的格式将从 0000-00-00 (YYYY-mm-dd) 开始,当您需要一个值时,只需更改演示格式即可。

6.- 您可以删除“myvarchar”并将“Temp_ColDate2”重命名为“myvarchar”

使用此方法,您可以检查分解它们时的任何日期是否有问题。我希望它对你有帮助。请注意,这仅适用于其他直接方法不起作用的情况。

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 2014-01-19
    • 2023-03-04
    • 2011-02-05
    • 2016-09-14
    • 2016-12-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    相关资源
    最近更新 更多