组合dateparts以在SQL Server中创建新的日期时间

时间:2017-04-02 15:10:36

标签: sql-server datetime combinations datepart

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

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

我很感激。感谢。

2 个答案:

答案 0 :(得分:3)

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

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
| InstallDate         |
| :------------------ |
| 03/02/2016 00:00:00 |

dbfiddle here

答案 1 :(得分:0)

我认为转换为Datetime时应使用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],