如何将varchar列类型转换为日期类型而不丢失日期

时间:2011-08-17 09:01:40

标签: mysql sql

我正在寻找一种方法来更改列的数据类型。目前,在我的数据库中,日期列类型被定义为varchar,我需要将它们转换回日期类型。

知道该怎么做吗?

6 个答案:

答案 0 :(得分:4)

您需要根据您的确切表格结构进行调整,但需要像

那样
CREATE TABLE temp (startdate varchar(255), stuff varchar(255));

INSERT INTO temp
SELECT startdate,stuff
FROM mytable;

TRUNCATE TABLE mytable;

ALTER TABLE mytable ALTER COLUMN startdate DATETIME NOT NULL;

INSERT INTO mytable
SELECT CAST(startdate AS DATETIME), stuff FROM temp;

DROP TABLE temp;

答案 1 :(得分:2)

首先,使用类型数据创建新列 接下来,运行更新查询,使用旧列的值填充新列,并根据需要应用任何转换 接下来,删除旧列 最后,将新列重命名为旧列

答案 2 :(得分:1)

  1. 使用临时名称
  2. 创建新的DATE列
  3. 使用使用STR_TO_DATE()
  4. 的UPDATE查询填充新列
  5. 如果一切正常,请删除VARCHAR列并重命名DATE列。

答案 3 :(得分:0)

Mysql默认日期格式为:YYYY-MM-DD。如果你试图插入日期,就像你实际做的那样,日期将插入这些值:000-00-00,给你一个暗示mySql可接受的日期格式。

答案 4 :(得分:0)

想与SQL Server用户共享此内容。对我来说,这种方法更方便,更安全。

  1. 在您的表中创建新列“ NewDate”(临时或随意命名)。
  2. 确保要转换的表中没有无效的Datetime格式。在这里尝试以下格式:https://www.w3schools.com/sql/trysqlserver.asp?filename=trysql_func_sqlserver_cast3 <---您需要彻底检查,否则执行下面的命令将会出错。

  3. 执行此命令:

更新myTable SET NewDate = CAST(OldDate AS日期时间) (OldDate <>'')和(OldDate不为NULL)-确保只转换需要的内容,否则会出错。

  1. 您现在可以删除旧列,即“ OldDate”。
  2. 最后,您可以将创建的新表拖放到刚刚删除表设计中旧列的插槽中。

答案 5 :(得分:0)

如果您的列的字段为VARCHAR,并且将日期存储为DD-MM-YYYY,那么我们必须按照以下PHP代码将日期转换为YYYY-MM-DD格式。

$cd = array();

$cd1 = array();

$cdf = array();

$getdata = mysqli_query($link,"SELECT columnname FROM tablename");

while($row=mysqli_fetch_array($getdata))        
{   
    $cd = $row['columnname'];

    $cd1 = strtotime($cd);

    $cdf = date('Y-m-d',$cd1);

    mysqli_query($link,"UPDATE tablename SET columnname = 
    REPLACE(columnname,'$cd','$cdf')");
}

运行此PHP代码后,在MySQL表中将列的数据类型更改为'DATE'。 它对我有用,而不会丢失或截断数据。