2016-08-19 289 views
1

我在SQL Server Management Studio中获得了一个数据集。SQL Server:将字符串转换为数字 - 从字符串转换日期和/或时间时转换失败

数据如下所示

month Year 
------------- 
Feb  2016 
Jan  2015 

我想创建一个使用01作为DD数字日期。我试图

CAST('01-'+ month +'-'+ year AS DATE) 

CONVERT(DATETIME, '01-'+ month +'-'+ year, 106) AS 

他们都导致此错误:

Conversion failed when converting date and/or time from character string.

谁能教我如何隐蔽串入数字日期时间/日期请。

+0

的可能的复制[Sql Server字符串到日期转换](http://stackoverflow.com/questions/207190/sql-server-string-to-date-conversion) – fedorqui

+2

现在你有一个解决方案,你应该考虑改变你的数据类型来存储d在正确的数据类型中吃信息。在这种情况下可能是约会。将其存储为字符串充满了不必要的挑战。 –

回答

1

也许原因是连字符。你应该尝试用空格代替:

convert(datetime, '01 '+ month +' '+ year, 106) 

另一种可能性是,month包含无效值。在SQL Server 2012+,使用try_convert(),以避免这样的问题:

try_convert(datetime, '01 '+ month +' '+ year, 106) 
1

另一种选择是使用CONCAT与转换,如果2012+

Select convert(datetime, concat(1,month ,year), 106) 
+0

需要注意的是'CONCAT'是SQL Server ** 2012中的新增功能**,所以如果OP使用早期版本,他将无法使用这个 –

0

使用此代码

convert(datetime, concat('01-', mnth , '-',yr), 106) AS d 
+0

应该指出'CONCAT'是新的SQL Server ** 2012 **,所以如果OP使用早期版本,他将无法使用此 –

+0

明白了您的观点.. –

相关问题