-1

我需要将一个表的记录复制到另一个表,但在执行此操作之前,我需要将我的日期戳列 (nvarchar) 转换为 datetime 格式,因为日期是 varchar 格式,因此我无法查询该表。我知道如何将 varchar 转换为日期时间格式,但它是针对单个记录的。任何人都可以向我推荐一种简单快捷的方法,将整个列转换为日期时间格式,然后将记录复制到另一个表中。例如,varchar 日期戳的格式是 2013 年 1 月 16 日,星期三。

declare @dateString varchar(50)
set @dateString = 'wednesday, january 16, 2013'

declare @index int
set @index = charindex( ',', @dateString )
set @dateString = substring( @dateString, @index + 1, len(@dateString) - @index)

select cast(@dateString as datetime)

上面的代码在 datetime 中转换了我的格式的 varchar

4

2 回答 2

0

看起来您使用的是 MS SQL Server,而不是 MYSQL。

您需要做的就是将您的函数逻辑放在那里,将子字符串函数中的 @index 替换为charindex(',' columnname)并将其作为SELECTINSERT..SELECT 语句的一部分

INSERT ....
SELECT cast(
    substring( COLUMN
              , charindex( ',', COLUMN ) + 1
              , len(COLUMN) - charindex( ',', COLUMN )
             ) as datetime
           ) from XXX

此 SQLFiddle 上有一个完整的示例。

于 2013-03-28T16:17:58.107 回答
0

我有同样的问题,我已经通过这种方式解决了。

  1. 使用前缀复制整个表 - 示例 table1 -> backup_table1
  2. 从原始表中删除所有原始数据,例如使其为空
  3. 将原始表中的 varcher 字段更改为日期或日期时间。我已将我的从 VARCHAR 更改为 DATE。
  4. 将备份表中的所有信息复制到原始表中,但使用 sql 查询直接转换日期。我正在将 field1 和 field2 从 dd-mm-YY 转换为 YY-mm-dd

我用这个:

INSERT INTO original_table
(field1, field2, field3, field4 ...)
SELECT 
DATE_FORMAT(STR_TO_DATE(field1, '%d-%m-%Y'), '%Y-%m-%d'), 
DATE_FORMAT(STR_TO_DATE(field`, '%d-%m-%Y'), '%Y-%m-%d'), 
field3, filed4 ...
FROM backup_table

这样,当我复制信息并将 varchar 日期直接转换为 DATE 格式 sql 标准格式时。希望这对某人有所帮助。

于 2013-04-08T19:54:14.477 回答