[英]SQL Server Converting varchar to datetime
我在SQL Server中將varchar
轉換為datetime
遇到問題。 我想轉換/更新表中的整個列[datelog]
:
[dd.mm.yyyy hh:mm:ss]` to `[yyyy-mm-dd hh:mm:ss]
棘手的解決方案,
DECLARE @inputDate AS VARCHAR(20)='21.11.2015 06:59:00' -- [dd.mm.yyyy hh:mm:ss]
SET @inputDate = REPLACE(@inputDate ,'.' ,'/')
SELECT CONVERT(VARCHAR(24) ,CONVERT(DATETIME ,@inputDate ,103) ,121) OutputDate -- [yyyy-mm-dd hh:mm:ss]
仍然需要根據表列進行更改。
在SQL Server 2012+中,可以根據特定區域性使用PARSE或TRY_PARSE來解析文本值。
假設您的文字遵循德國文化('de-DE'),則可以使用以下方式將其解析為日期時間:
select PARSE('24.11.2015 13:10:55' as datetime using 'de-DE')
例如:
select PARSE(datelog as datetime using 'de-DE')
真正的解決方案是使用正確的字段類型,即datetime
。 幾乎可以保證有人在某個地方輸入格式錯誤的文本,或者嘗試使用錯誤的區域性來轉換文本。
另一方面,日期類型沒有格式,它們只是二進制值。 使用它們更快,更安全,更容易。
具有一列varchar類型的臨時表
create table #temp3 (someDate varchar (30))
insert into #temp3 values ('23.03.1989 15:23:43')
使用concat,substring和right的組合
select concat
(
SUBSTRING(someDate,7,4),'-', SUBSTRING(someDate,4,2),'-',SUBSTRING(someDate,1,2), ' ', right(someDate, 8)
)
from #temp3
給:1989-03-23 15:23:43
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.