2013-10-22 125 views
0

我轉換一些字符串值datetime如下:日期時間轉換在SQL Server 2005中

'20131018' 
'20130917' 

使用

CONVERT(DATETIME, @date, 101) 

我得到了以下

'2013-10-18 00:00:00.000' 
'2013-09-17 00:00:00.000' 

我怎麼刪除值的時間部分?

+0

在SQL Server 2008 ** **,你會得到'DATE'數據類型只是那 - 僅限日期。 2005年只有'DATETIME',這些值總是包含時間部分。 –

+0

時間組件是否會破壞任何東西,或只是在視覺上煩人? – StingyJack

+0

CONVERT(日期,@date,101)會做你想做的事 –

回答

0

SUBSTRING(表達,啓動,長度),其中表達將是您的時間戳串,並開始將是1和長度將是「YYYY-MM-DD」,即長度10對於 多個參考請http://technet.microsoft.com/en-us/library/ms187748.aspx

檢查「marc_s」所說的內容。只需使用DATE而不是DATETIME.This將是更好的選擇。

+0

真的,'DATE'在這裏是更好的選擇 - 但是這個數據類型是** NOT YET **在SQL Server * * 2005 **,即OP正在使用.... –

+0

@ marc_s - 然後我們可以使用子串,我認爲我建議。 – virus

0

有我做的一些代碼。如果你能弄清楚如何讓這個更快或更好,讓我知道! ;)

case --Format date into YYYYMMDD with placeholder 0's 
    when (CAST(DATEPART(DD,DATEADD(day, 7, <DATE>)) as int) < 10) AND (CAST(DATEPART(MM,DATEADD(day, 7, <DATE>)) as int) < 10) 
    then CAST(DATEPART(YYYY,DATEADD(day, 7, <DATE>)) as CHAR(4)) 
     +'0'+ LTRIM(RTRIM(CAST(DATEPART(MM,DATEADD(day, 7, <DATE>)) as CHAR(2)))) 
     +'0'+LTRIM(RTRIM(CAST(DATEPART(DD,DATEADD(day, 7, <DATE>)) as CHAR(2)))) 
    when (CAST(DATEPART(MM,DATEADD(day, 7, <DATE>)) as int) < 10) 
    then CAST(DATEPART(YYYY,DATEADD(day, 7, <DATE>)) as CHAR(4)) 
     +'0'+LTRIM(RTRIM(CAST(DATEPART(MM,DATEADD(day, 7, <DATE>)) as CHAR(2)))) 
     +CAST(DATEPART(DD,DATEADD(day, 7, <DATE>)) as CHAR(2)) 
    when (CAST(DATEPART(DD, DATEADD(day, 7, <DATE>)) as int) < 10) 
     then CAST(DATEPART(YYYY,DATEADD(day, 7, <DATE>)) as CHAR(4)) 
      + CAST(DATEPART(MM,DATEADD(day, 7, <DATE>)) as CHAR(2)) 
      +'0'+LTRIM(RTRIM(CAST(DATEPART(DD,DATEADD(day, 7, <DATE>)) as CHAR(2)))) 
    else CAST(DATEPART(YYYY,DATEADD(day, 7, <DATE>)) as CHAR(4)) 
     +CAST(DATEPART(MM,DATEADD(day, 7, <DATE>)) as CHAR(2)) 
     +CAST(DATEPART(DD,DATEADD(day, 7, <DATE>)) as CHAR(2)) 
end 

下面是它的工作原理。把它放在SELECT之後。做一個查找和替換,並把你的日期在那裏。它會檢查月份和日期的數字位數,然後在適當的時候在字符串中插入0或2。我保存了這段代碼,以便在遇到此問題時很容易使用。希望能幫助到你!

- 編輯 - 它發生在我,這可能是你想要做什麼反...