我有如下数据
2007-12-19-11.57.17.366731
并且数据类型是varchar(26)
我只想将数据类型更改为datetime
.
我尝试了所有语法但没有用,我得到了
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
这是我正在尝试的示例
SELECT CONVERT(Datetime, '2007-12-19-11.57.17.366731', 120)
谢谢
我有如下数据
2007-12-19-11.57.17.366731
并且数据类型是varchar(26)
我只想将数据类型更改为datetime
.
我尝试了所有语法但没有用,我得到了
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
这是我正在尝试的示例
SELECT CONVERT(Datetime, '2007-12-19-11.57.17.366731', 120)
谢谢
好吧,首先,您需要添加一些字符串魔术来将您的数据转换为DATETIME
. 而且您还需要使用更少的毫秒数(因为DATETIME
您有 3 位数字),在 SQL Server 2008 中您可以使用DATETIME2
它。尝试以下操作:
DECLARE @Value VARCHAR(26)
SET @Value = '2007-12-19-11.57.17.366731'
SELECT CONVERT(DATETIME,LEFT(@Value,10) + ' ' +
REPLACE(SUBSTRING(@Value,12,8),'.',':') + '.' +
SUBSTRING(@Value,21,3), 120) ValueAsDatetime,
CONVERT(DATETIME2,LEFT(@Value,10) + ' ' +
REPLACE(SUBSTRING(@Value,12,8),'.',':') + '.' +
RIGHT(@Value,6), 120) ValueAsDatetime2
结果:
╔═════════════════════════╦═════════════════════════════╗
║ ValueAsDatetime ║ ValueAsDatetime2 ║
╠═════════════════════════╬═════════════════════════════╣
║ 2007-12-19 11:57:17.367 ║ 2007-12-19 11:57:17.3667310 ║
╚═════════════════════════╩═════════════════════════════╝
您正在尝试提供不可接受的datetime
格式。这是正确的格式:
SELECT CONVERT(Datetime, '2007-12-19 11:57:17.366', 120)
请参阅另一个问题:Best way to parse DateTime to SQL server
您必须将“安全”格式传递给 DateTime 函数,这意味着您必须将字符串解析为其组件,然后以正确的格式将其传递给 DateTime