【问题标题】:Combining dateparts to create new datetime in SQL Server组合日期部分以在 SQL Server 中创建新的日期时间
【发布时间】:2017-04-02 15:10:36
【问题描述】:

我正在尝试通过组合不同列的日期部分来创建自己的日期。我的代码如下:

CAST((datepart(yy,[FIRST_INSTALL_DATE]) 
     + '-'
     + datepart(mm,[INSTALL_DATE]) 
     + '-'
     + datepart(dd,[INSTALL_DATE])) as Datetime) AS [Install_Date],

(其中 FIRST_INSTALL_DATE 的值为 2014-01-01,INSTALL_DATE 的值为 1900-08-07。)

但是,我得到下面应该是 2014-08-07 00:00:00.000

的输出
1905-08-07 00:00:00.000

我很欣赏任何想法。谢谢。

【问题讨论】:

  • 哪个 sql server 版本?
  • 生成显示数据的相关记录的FIRST_INSTALL_DATE 的值是多少?
  • 如果 2012+ 考虑 DateFromParts()
  • 版本:SQL Server Management Studio 2012。

标签: sql-server datetime combinations datepart


【解决方案1】:

基本上你是在尝试添加数字,

2014 +- 03 +- 02

您必须先将每个 DATEPART 转换为 VARCHAR 才能连接它。

CAST(DATEPART(YY, FIRST_INSTALL_DATE) AS varchar(10)) 

SQL-Server 2012

DECLARE @FIRST_INSTALL_DATE datetime = '2016/01/01 00:00:00';
DECLARE @INSTALL_DATE datetime = '2017/02/03 00:00:00';


SELECT DATEFROMPARTS (datepart(yyyy, @FIRST_INSTALL_DATE), 
                      datepart(MM,@INSTALL_DATE), 
                      datepart(dd,@INSTALL_DATE)) AS InstallDate;

GO
|安装日期 | | :----------------- | | 2016 年 3 月 2 日 00:00:00 |

dbfiddle here

【讨论】:

    【解决方案2】:

    我认为你应该在转换为日期时间时使用 ISO 8601 YYYYMMDD 格式

    SELECT
    CAST(
      CAST(datepart(yy,[FIRST_INSTALL_DATE]) AS VARCHAR(4)) +
      RIGHT('0' + CAST(datepart(mm,[INSTALL_DATE]) AS VARCHAR(2)), 2) +
      RIGHT('0' + CAST(datepart(dd,[INSTALL_DATE]) AS VARCHAR(2)), 2) 
    AS DATETIME) AS [Install_Date],
    

    【讨论】:

    • 我收到一个名为的错误“从字符串转换日期和/或时间时转换失败。”
    猜你喜欢
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 2017-04-22
    • 2021-03-10
    • 2016-09-19
    相关资源
    最近更新 更多