将varchar 2007-12-19-11.57.1​​7.366731转换为datetime数据类型

时间:2013-04-08 20:49:18

标签: sql-server sql-server-2008-r2

我的数据如下所示

2007-12-19-11.57.17.366731 

,数据类型为varchar(26)

我想只将数据类型更改为datetime

我尝试了所有语法,但没有用,我正在

  

将varchar数据类型转换为日期时间数据类型会导致超出范围的值。

以下是我正在尝试的示例

SELECT CONVERT(Datetime, '2007-12-19-11.57.17.366731', 120)

由于

3 个答案:

答案 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