将 varchar 2007-12-19-11.57.17.366731 转换为 datetime 数据类型
Posted
技术标签:
【中文标题】将 varchar 2007-12-19-11.57.17.366731 转换为 datetime 数据类型【英文标题】:Convert varchar 2007-12-19-11.57.17.366731 to datetime datatype 【发布时间】:2013-04-08 20:49:17 【问题描述】:我有如下数据
2007-12-19-11.57.17.366731
数据类型为varchar(26)
我只想将数据类型更改为datetime
。
我尝试了所有语法但没有用,我得到了
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
这是我正在尝试的示例
SELECT CONVERT(Datetime, '2007-12-19-11.57.17.366731', 120)
谢谢
【问题讨论】:
【参考方案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 ║
╚═════════════════════════╩═════════════════════════════╝
【讨论】:
非常感谢它有效,但在 100,000 条记录中,我只获得了 75000 条记录。我希望很少有记录的格式不同。在 75000 条记录之后,日期可能是奇怪的格式。所以剩余的记录没有被填充。我希望我认为无论记录是不同格式的记录都写成 NULL 并传递剩余的 75000 条记录。【参考方案2】:您试图提供不可接受的datetime
格式。这是正确的格式:
SELECT CONVERT(Datetime, '2007-12-19 11:57:17.366', 120)
【讨论】:
【参考方案3】:查看其他问题:Best way to parse DateTime to SQL server
您必须将“安全”格式传递给 DateTime 函数,这意味着您必须将字符串解析为其组件,然后以正确的格式将其传递给 DateTime
【讨论】:
以上是关于将 varchar 2007-12-19-11.57.17.366731 转换为 datetime 数据类型的主要内容,如果未能解决你的问题,请参考以下文章