2017-04-02 34 views
0

我想通过组合不同列的dateparts来创建我自己的日期。我的代码如下:结合dateparts在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年1月1日和INSTALL_DATE的价值是1900年8月7日)。

不过,我得到以下的地方应该是输出2014年8月7日00:00:00.000

1905-08-07 00:00:00.000 

我明白任何想法。谢谢。

+0

哪个sql server版本? – McNets

+0

“FIRST_INSTALL_DATE”对产生所显示数据的记录有什么价值? –

+1

如果2012+考虑DateFromParts() –

回答

3

基本上你尝试添加数字,

2014 +- 03 +- 02 

您必须在每次DATEPART转换为VARCHAR之前Concat的它。

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

0

我认为你应该使用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], 
+0

我收到一个错误,称为**“转换日期和/或时间从字符串转换失败。”** – BTurkeli