sql server语言 - 将varchar变量转换为datetime变量



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

相关内容

  • 没有找到相关文章

最新更新