我有一个包含几列的数据。其中之一(Col1)是varchar变量。
我将给出一些值的示例:
Col1:
'2013-01-01 00:00:00:000'
NULL
'2013-01-01 00:00:00:000'
我的设计,我试图改变数据类型从varchar变量到datetime变量,它抛出我一个错误:
"Unable to modify table. conversion failed when converting date and/or time from a character string".
有什么建议可以解决这个问题吗? 必须将varchar转换为datetime。可以使用强制类型转换或转换函数。您应该将日期值以适当的格式存储在varchar列中。
我假设你使用的是SQL server 2012。
试试这样,
DECLARE @d TABLE (col1 VARCHAR(50))
INSERT INTO @d
VALUES ('2013-01-01 00:00:00:000')
,(NULL)
,('2013-01-01 00:00:00:000')
SELECT convert(DATETIME, Col1) AS DATE
如果上述查询返回错误,则可以使用try_convert函数。(这将忽略你的坏格式数据)注意:你应该对你的坏数据采取必要的措施。
SELECT try_convert(DATETIME, Col1) AS DATE
FROM @d
FROM @d
您可以使用ISDATE()
来过滤日期列,而只需使用CAST
来过滤该列。
在MSDN中它描述为
如果表达式是有效的日期、时间或datetime值,则返回1;否则,0。
给定数据的示例执行:
DECLARE @TestTable TABLE (Col1 VARCHAR(50))
INSERT INTO @TestTable (Col1) VALUES
('2013-01-01 00:00:00:000'),
(NULL),
('2013-01-01 00:00:00:000');
SELECT CAST(Col1 AS DATETIME)
FROM @TestTable
WHERE ISDATE(Col1) = 1
输出:Col1
------------------------
2013-01-01 00:00:00:000
2013-01-01 00:00:00:000
嗨@Jordan1200如上所述,下面应该是一个快速而简单的修复;
CAST(Col1 AS DATETIME) AS Col1