我有一些包含几列的数据。其中一个(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".
有任何删除问题的建议吗?
答案 0 :(得分:0)
您必须将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
答案 1 :(得分:0)
您可以使用ISDATE()
过滤日期列,只需CAST
列。
在MSDN中,它描述为
如果表达式是有效的日期,时间或日期时间值,则返回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
答案 2 :(得分:0)
如上所述,您好@ Jordan1200应该是一个快速而简单的解决方案;
CAST(Col1 AS DATETIME) AS Col1