【问题标题】:SQL server v17 : how to convert smalldatetime value to datetimeSQL server v17:如何将 smalldatetime 值转换为 datetime
【发布时间】:2018-02-15 12:58:32
【问题描述】:

我使用以下查询插入数据:

 CASE(isdate([Date])) 
            WHEN 1 THEN [date] 
            WHEN 0 THEN cast(substring([Date],0,5) - 2 as smalldatetime)
            ELSE [date] END 

现在,datetime 列的日期为 smalldatetime 格式。如何将 smalldatetime 格式的日期转换为 datetime 格式,而列类型是 datetime。

示例:对于数字日期 41298,结果为 1911-04-21 00:00:00,但实际预期结果为 2013-01-26 00:00:00.000

【问题讨论】:

  • 您是否尝试将 smalldatetime 中的值存储到 datetime 列中?我认为它将由它自己管理。

标签: sql-server casting datetime-format


【解决方案1】:

我认为您正在寻找这样的东西:

(CASE WHEN ISNUMERIC([Date]) = 1
      THEN DATEADD(day, CAST([Date] as int), '1899-12-31')
      WHEN iSDATE([Date]) = 1
      THEN CAST([date] as smalldatetime)
 END)

值 41298 看起来像 Excel 格式的日期。这些从 1899 年的最后一天开始计算。

【讨论】:

  • Excel 值也是我最初的想法,但与预期的结果相差一天。
【解决方案2】:

我已经尝试了您给定的值,它转换为预期的结果,请看一下;

SELECT CAST(CAST(41298 AS smalldatetime) AS DATE) AS Date
SELECT CAST(41298 AS smalldatetime) AS Date

输出:

【讨论】:

    【解决方案3】:

    另一个选项是 DateAdd

    Select DateAdd(DAY,41298,'1900-01-01')
    

    返回

    2013-01-26 00:00:00.000
    

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      相关资源
      最近更新 更多