簡體   English   中英

T-SQL將字符串從ddmmyyyy轉換為dd MMM yyyy

[英]T-SQL convert string from ddmmyyyy to dd MMM yyyy

我有字符串 20120821 ,我還需要將其轉換為21 AUG 2012 字符串 什么是簡單的方法?

您可以在此處找到大量不同的輸出。

但要回答您的問題:

DECLARE @date VARCHAR(8) = '20120821';

SELECT CONVERT(VARCHAR(11), CONVERT(DATE, @date), 113);
declare @t varchar(50) = '20120821'
select convert(varchar(50),convert(date,@t),113)

您可以使用datefromparts()轉換為日期:

select datefromparts(right(ddmmyyyy, 4), substring(ddmmyyyy, 3, 2), left(ddmmyyyy, 2))

然后,您可以將其轉換為字符串:

select convert(varchar(255), datefromparts(right(ddmmyyyy, 4), substring(ddmmyyyy, 3, 2), left(ddmmyyyy, 2)), 106)

使用cast convert並像這樣convert

select convert(varchar, cast('20120821' as datetime), 6)  

要么

select convert(varchar, cast('20120821' as datetime), 113) 

艱難的問題已經有了四個答案-現有的答案都不過是代碼轉儲而已-所以我想我會添加一些解釋。

日期的字符串表示形式被認為是臭名昭著的,因為它們中的許多內容含糊不清-例如, 02/04/2019 2019可以解釋為2019年2月4日2019年4月2日

當您輸入兩位數的年份時,情況會變得更糟01/02/03可以代表許多不同的日期-包括不同的世紀!

幸運的是,您的源字符串采用兩種格式之一,保證在轉換為Date但不轉換DateTime )時,SQL Server始終可以正確解釋它們:
yyyymmdd是一個,而yyyy-mm-dd是另一個。

這兩種格式均為國際標准,並在ISO 8601中進行了描述。

但是請注意, DateTime數據類型中存在一個已知的錯誤(功能?) ,該錯誤使yyyy-mm-dd格式區域性相關。 新的和改進的替代數據類型DateTime2中不存在此錯誤。

我不會在此答案中添加代碼,因為它只會重復Jim Jimson的答案apomene的答案中的代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM