将varchar变量转换为datetime变量

时间:2016-07-04 07:13:49

标签: sql-server sql-server-2008 datetime varchar

我有一些包含几列的数据。其中一个(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". 

有任何删除问题的建议吗?

3 个答案:

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