代码之家  ›  专栏  ›  技术社区  ›  Younes

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

  •  0
  • Younes  · 技术社区  · 15 年前

    我想转换一个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必须是datetime值,但我无法使其正常工作。当我尝试将其强制转换为日期时间时,它给了我一个 out of range 例外。

    以下是此查询的结果:

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

    我希望“datum”字段是具有相同值但采用datetime格式的datetime字段。有人能帮我一下吗:)

    谢谢,

    尤尼斯

    3 回复  |  直到 15 年前
        1
  •  1
  •   cjk    15 年前

    使用此:

    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]
    
        2
  •  0
  •   user31571    15 年前

    您没有将varchars强制转换为datetime

    CAST and CONVERT on MSDN .

    你能试试这个吗?

    SELECT CAST(('2010' + '-' + '01' + '-' + '06') AS DATETIME)
    
        3
  •  0
  •   MartW    15 年前

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

    同时检查 马兰 达格 是有效的天和月。