1

我有如下数据

2007-12-19-11.57.17.366731 

并且数据类型是varchar(26)

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

我尝试了所有语法但没有用,我得到了

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

这是我正在尝试的示例

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

谢谢

4

3 回答 3

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 ║
╚═════════════════════════╩═════════════════════════════╝
于 2013-04-08T20:59:47.263 回答
0

您正在尝试提供不可接受的datetime格式。这是正确的格式:

SELECT CONVERT(Datetime, '2007-12-19 11:57:17.366', 120)
于 2013-04-08T20:54:18.900 回答
0

请参阅另一个问题:Best way to parse DateTime to SQL server

您必须将“安全”格式传递给 DateTime 函数,这意味着您必须将字符串解析为其组件,然后以正确的格式将其传递给 DateTime

于 2013-04-08T20:56:42.663 回答