合并日期部分以在 SQL 服务器中创建新的日期时间
Combining dateparts to create new datetime in SQL Server
我正在尝试通过组合不同列的日期部分来创建我自己的日期。我的代码如下:
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
我很感激任何想法。谢谢
基本上你是在尝试添加数字,
2014 +- 03 +- 02
您必须先将每个 DATEPART 转换为 VARCHAR 才能连接它。
CAST(DATEPART(YY, FIRST_INSTALL_DATE) AS varchar(10))
SQL-服务器 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
我认为您在转换为日期时间时应该使用 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],
我正在尝试通过组合不同列的日期部分来创建我自己的日期。我的代码如下:
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
我很感激任何想法。谢谢
基本上你是在尝试添加数字,
2014 +- 03 +- 02
您必须先将每个 DATEPART 转换为 VARCHAR 才能连接它。
CAST(DATEPART(YY, FIRST_INSTALL_DATE) AS varchar(10))
SQL-服务器 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
我认为您在转换为日期时间时应该使用 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],