SQL server v17:如何将 smalldatetime 值转换为 datetime

Posted

技术标签:

【中文标题】SQL server v17:如何将 smalldatetime 值转换为 datetime【英文标题】:SQL server v17 : how to convert smalldatetime value to 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 列中?我认为它将由它自己管理。 【参考方案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

【讨论】:

以上是关于SQL server v17:如何将 smalldatetime 值转换为 datetime的主要内容,如果未能解决你的问题,请参考以下文章

博途v17可以和200smart可以兼容吗

ADT 和 SDK 工具更新到 v17 后的 Gson NoClassDefFoundError

React v17 热刷新 不起作用

Ubuntu 16.04 安装 Kodi v17 “Krypton” Alpha 2

SQL Server,HQL:如何将 SQL Server 日期时间列字段与日期进行比较

如何将 SQL Server 2008 R2 SSIS 包升级到 SQL Server 2016?