2015-10-05 31 views
2

我有一列是datetime類型的列。
我要分開日期和時間,這在我以前left() & right()封閉由cast()convert()象下面這樣:CAST()或CONVERT()不會將日期時間格式更改爲SQL Server 2008中的字符串

Select BATCH, 
LEFT(CAST(S_DATE AS VARCHAR(20)),12) AS ST_DATE, 
RIGHT(CAST(S_DATE AS VARCHAR(20)),8) AS ST_TIME, 
LEFT(CAST(E_DATE AS VARCHAR(20)),12) AS E_DATE, 
RIGHT(CAST(E_DATE AS VARCHAR(20)),8) AS E_TIME 
INTO CRYST2 
From Z_BATCH; 

這是我datetime列實際格式: -

2015-10-01 14:00:00.000 

但問題在於它準確地將日期和時間分開,但它不是以字符串形式返回輸出,因爲輸出本身分別在其時間格式中分別變爲&時間格式各自的專欄。 以下是我得到的輸出: -

1 Oct 1 2015  2:00PM Oct 1 2015  2:30PM 

正如你可以清楚地看到我的日期 - 時間串轉換後分離仍讓我對某些日期時間格式輸出的列。 請幫忙。

+0

不要將日期時間轉換爲varchar。相反,使用dateadd和datediff來獲取日期的午夜,或者使用datepart來獲取日期的不同部分。 –

+0

@ZoharPeled,你的意思是說,從日期時間格式第一個單獨的日期部分? 分別表示單獨的年份,月份和日期部分,然後連接它們? – prateek

+0

衝電氣它! CONVERT(日期,S_DATE), CONVERT(TIME,S_DATE) IT,得到所需的output.thanx所有! – prateek

回答

0

投的日期和喜歡的確切格式的時間:

CAST(S_DATE AS Time) AS ST_TIME 
CAST(S_DATE AS Date) AS ST_Date 

將返回:

14:00:00 
2015-10-01 
+0

CONVERT(日期,S_DATE) 這一個也給了我想要的輸出,thanx反正! – prateek

+0

是的,你可以使用兩次語法.. –

0

使用CONVERT與格式120來獲得期望的結果,它總是返回格式yyyy-MM-dd hh:mm:ss

CONVERT(varchar(20), S_DATE, 120) 
+0

CONVERT(日期,S_DATE)這一個也給了我期望的輸出,thanx反正! – prateek

0

您可以試試這一點,如果你想在字符串格式結果:

select convert(varchar(11),cast(S_DATE as date),106) 
select convert(varchar(11),cast(S_DATE as time),100) 

如果你試圖讓日期和時間格式回答,試試這個:

CAST(S_DATE AS Time) AS ST_TIME 
CAST(S_DATE AS Date) AS ST_Date 
1

這是我的datetime實際格式列:

2015年10月1日14:00:00.000

不,不是這樣的。一個datetime值根本沒有格式,它只代表一個時間點。只有在將其轉換爲字符串時纔會獲得格式。

當您轉換日期時間值時,您沒有指定任何格式,因此它將使用默認格式(0)。您可以使用您看到的日期時間值顯示爲(121)的格式以獲得期望的結果:

Select BATCH, 
LEFT(CAST(S_DATE AS VARCHAR(19),121),10) AS ST_DATE, 
RIGHT(CAST(S_DATE AS VARCHAR(19),121),8) AS ST_TIME, 
LEFT(CAST(E_DATE AS VARCHAR(19),121),10) AS E_DATE, 
RIGHT(CAST(E_DATE AS VARCHAR(19),121),8) AS E_TIME 
INTO CRYST2 
From Z_BATCH; 
+0

[和多一點閱讀(和自我促進: - ))](http://stackoverflow.com/questions/30032915/how-to-cast-the-datetime-to-time/30033028#30033028) –

相關問題