2017-04-02 95 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