如何将此varchar值转换为日期时间

时间:2010-01-06 07:59:35

标签: sql-server

我想将iI设置的varchar值转换为日期时间值。我想将数据库的行加载到另一个数据库中,但转换进展不顺利。

这是我的疑问:

select Krant
       , cast(jaar as varchar(4))+'-'
          +RIGHT('0'+cast(maand as varchar(2)),2)+'-'
          +RIGHT('0'+cast(dag as varchar(2)),2) as datum
       , Inhoud as artikel
       , LEN(Inhoud)-LEN(Replace(Inhoud,' ','')) as numwords
       , 'Goirle' as vestiging 
from [Sitecore_Bibliotheekmb_Krantenknipsel].[dbo].[KRANGOI]

对Datum的强制转换必须是日期时间值,但我没有让它正常工作。当我试图投射到日期时,它给了我一个out of range例外。

以下是此查询的结果:

alt text http://94.100.115.48/837450001-837500000/837478801-837478900/837478868_5_dE_7.jpeg

我希望“基准”字段是具有相同值但具有日期时间格式的日期时间字段。有人可以帮我吗:)。

谢谢,

尤尼斯

3 个答案:

答案 0 :(得分:1)

使用此:

select Krant, cast(cast(jaar as varchar(4))+'-'
  +RIGHT('0'+cast(maand as varchar(2)),2)+'-'
  +RIGHT('0'+cast(dag as varchar(2)),2) as datetime) as datum, 
  Inhoud as artikel, 
  LEN(Inhoud)-LEN(Replace(Inhoud,' ','')) as numwords, 
  'Goirle' as vestiging 
from [Sitecore_Bibliotheekmb_Krantenknipsel].[dbo].[KRANGOI]

答案 1 :(得分:0)

您没有将变量转换为日期时间

CAST and CONVERT on MSDN

你可以试试这个:

SELECT CAST(('2010' + '-' + '01' + '-' + '06') AS DATETIME)

答案 2 :(得分:0)

如果您的任何日期早于1753年,则简单的日期时间类型将不足够。为此,您需要使用SQL Server 2008中引入的datetime2数据类型。

同时检查 maand dag 的所有值是否为有效日期和月份。