Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将varchar date字段转换为datetime数据类型_Sql Server - Fatal编程技术网

Sql server 将varchar date字段转换为datetime数据类型

Sql server 将varchar date字段转换为datetime数据类型,sql-server,Sql Server,我犯了使用varchar存储表示日期/时间的数据的错误。现在,我尝试转换存储为varchar的文本数据列,如下所示: 2020-11-25T14:22:41.3539327Z 输入到存储日期时间数据类型的列中 -- to fix it you can use convert, below uses GetDate for examaple SELECT convert(varchar, getdate(), 120) 根据您需要的精度,您可以使用下面的链接找到它,并将120更改为该精度所需的

我犯了使用varchar存储表示日期/时间的数据的错误。现在,我尝试转换存储为varchar的文本数据列,如下所示:

2020-11-25T14:22:41.3539327Z
输入到存储日期时间数据类型的列中

-- to fix it you can use convert, below uses GetDate for examaple
SELECT convert(varchar, getdate(), 120)
根据您需要的精度,您可以使用下面的链接找到它,并将120更改为该精度所需的任何数字

要修复表格,应遵循以下步骤:

  • 向表中添加DateTime的新列
  • 使用上面的Convert对表运行更新,以使用varchar字段中的转换值更新新列
  • 然后删除包含varchar数据的列
  • 代码来执行我上面概述的步骤

    ALTER TABLE dbo.TableName ADD NewDateTimeCOL DATETIME
    
    -- NOTE if your table is LARGE you will not want to do a direct update like this but do looping for performace purposes
    UPDATE dbo.TableName
    SET NewDateTimeCOL = convert(varchar, OldDateTimeCOL, 120)
    
    
    ALTER TABLE dbo.TableName DROP COLUMN OldDateTimeCOL
    

    如果所有数据的格式为
    yyyy-MM-ddThh:MM:ss.nnnnnnn
    ,则只需更改列的数据类型即可:

    ALTER TABLE dbo.YourTABLE ALTER COLUMN YourColumn datetime2(7);
    

    如果您需要时区,请使用
    datetimeoffset(7)

    幸运的是,这是一种明确的格式,因此
    cast(字段为datetime2)
    cast(字段为datetimeoffset)
    可以工作。我怀疑,如果您从SSMS更改类型或使用
    ALTER TABLE
    转换数据,则不需要problem@DaleK不,我不这么认为。这可能是部分原因,但我的datetime中的Z似乎会引起问题。@PanagiotisKanavos我相信你的答案也会出现同样的问题。事实上,在这里发布之前,我试图使用ALTERTABLE。有没有一种简单的方法可以从我的演员阵容中省略最后一个角色?@FastQ当然,但技巧是一样的。如果您要检查,它应该始终是您的第一个呼叫端口,您将找到转换日期的正确格式。什么
    相同的问题
    ?您只询问了如何转换数据<代码>演员阵容有效。UTC指示器根本不是问题,不应移除。这将失去准确性,
    datetime
    仅精确到1/300秒。我使用的格式似乎不是(请注意,在Java的ZonedDateTime类中,Z表示世界时)。我错过什么了吗?为了清楚起见,我不需要精度超过1秒。@FastQ
    Z
    没有问题。事实上,这种特定的格式是最容易转换的,因为它是明确的——由于本地化设置的原因,没有办法混淆它。这不是Java格式,这是ISO8601日期时间格式,即使在没有
    Z
    的情况下进行测试,我也会遇到问题。“从字符串转换日期和/或时间时转换失败。”也无法使用SSMS进行转换。@FastQ听起来有些日期是以其他格式存储的。因为那个贴出来的很好用。您可能需要使用
    try\u convert
    来识别失败日期。我必须删除默认约束,但这是有效的。我假设这里的每个解决方案都会起作用,但默认约束才是真正的问题。谢谢