[英]SQL Server 2008 : Varchar to Datetime conversion
我有一個datetime
列ArrivalDateTime
,它存儲為varchar
值。
假設值為20161212093256
,我希望輸出為2016-12-12 09:32:56
。
我可以用日期時間格式獲取日期部分,如下所示。
SELECT
CONVERT(DATETIME2(0), LEFT('20161212093256', 8))
這將輸出返回為2016-12-15 00:00:00
。
我嘗試了以下查詢來獲取時間部分。
SELECT
CONVERT(DATE, LEFT('20161212093256', 8)) + ' ' +
CONVERT(TIME, RIGHT('20161212093256', 6))
但這會引發錯誤:
數據類型date和varchar在add運算符中不兼容
我怎樣才能在這兩個日期和時間部分datetime
格式?
首先獲取日期組件並將其轉換為DATETIME
,然后獲取時間組件並將其轉換為DATETIME
。 最后, 添加兩個結果:
SELECT
CONVERT(DATETIME,LEFT('20161212093256', 8)) +
CONVERT(DATETIME,
LEFT(RIGHT('20161212093256', 6), 2) + ':' +
SUBSTRING(RIGHT('20161212093256', 6), 3, 2) + ':' +
RIGHT(RIGHT('20161212093256', 6), 2)
)
為了進一步說明,結果第一次轉換是日期組件:
2016-12-12 00:00:00.000
第二個轉換是時間組件,但是當您將其轉換為DATETIME
它會將其添加到0日期或'1900-01-01'
,因此結果為:
1900-01-01 09:32:56.000
然后,添加兩個DATETIME
以獲取:
2016-12-12 09:32:56.000
要擺脫ms組件:
SELECT
CONVERT(DATETIME,LEFT('20161212093256', 8)) +
CONVERT(DATETIME,
LEFT(RIGHT('20161212093256', 6), 2) + ':' +
SUBSTRING(RIGHT('20161212093256', 6), 3, 2) + ':00'
)
試試這個,
DECLARE @V_STR VARCHAR(20) = '20161212093256'
SELECT CONVERT(SMALLDATETIME,LEFT(@V_STR,8) +' '+ --date
SUBSTRING(@V_STR,9,2)+':'+ --hour
SUBSTRING(@V_STR,11,2)+':'+ --minute
SUBSTRING(@V_STR,13,2)) AS DATE_TIME --second
試試這個
select concat(CONVERT(DATE, LEFT('20161212093256', 8)) , ' ' , CONVERT(TIME, substring(RIGHT('20161212093256', 6),1,2)+ ':' + substring(RIGHT('20161212093256', 4),1,2) + ':' +RIGHT('20161212093256', 2)))
以上將顯示毫秒的時間,下面沒有毫秒
select concat(CONVERT(DATE, LEFT('20161212093256', 8)) , ' ' , substring(RIGHT('20161212093256', 6),1,2)+ ':' + substring(RIGHT('20161212093256', 4),1,2) + ':' +RIGHT('20161212093256', 2))
SELECT STUFF(STUFF(STUFF(STUFF(STUFF('20161212093256', 5, 0, '-'), 8, 0, '-'), 11, 0, ' '), 14, 0, ':'), 17, 0, ':')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.