我的数据如下所示
2007-12-19-11.57.17.366731
,数据类型为varchar(26)
我想只将数据类型更改为datetime
。
我尝试了所有语法,但没有用,我正在
将varchar数据类型转换为日期时间数据类型会导致超出范围的值。
以下是我正在尝试的示例
SELECT CONVERT(Datetime, '2007-12-19-11.57.17.366731', 120)
由于
答案 0 :(得分:1)
首先,您需要添加一些字符串魔法才能将数据转换为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 ║
╚═════════════════════════╩═════════════════════════════╝
答案 1 :(得分:0)
您正试图提供不可接受的datetime
格式。这是正确的格式:
SELECT CONVERT(Datetime, '2007-12-19 11:57:17.366', 120)
答案 2 :(得分:0)
请参阅另一个问题:Best way to parse DateTime to SQL server
您必须将“安全”格式传递给DateTime函数,这意味着您必须将字符串解析为其组件,然后以适当的格式将其传递给DateTime