Sql server 将varchar date字段转换为datetime数据类型
我犯了使用varchar存储表示日期/时间的数据的错误。现在,我尝试转换存储为varchar的文本数据列,如下所示: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更改为该精度所需的
2020-11-25T14:22:41.3539327Z
输入到存储日期时间数据类型的列中
-- to fix it you can use convert, below uses GetDate for examaple
SELECT convert(varchar, getdate(), 120)
根据您需要的精度,您可以使用下面的链接找到它,并将120更改为该精度所需的任何数字
要修复表格,应遵循以下步骤:
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秒。@FastQZ
没有问题。事实上,这种特定的格式是最容易转换的,因为它是明确的——由于本地化设置的原因,没有办法混淆它。这不是Java格式,这是ISO8601日期时间格式,即使在没有Z
的情况下进行测试,我也会遇到问题。“从字符串转换日期和/或时间时转换失败。”也无法使用SSMS进行转换。@FastQ听起来有些日期是以其他格式存储的。因为那个贴出来的很好用。您可能需要使用try\u convert
来识别失败日期。我必须删除默认约束,但这是有效的。我假设这里的每个解决方案都会起作用,但默认约束才是真正的问题。谢谢