2016-09-22 90 views
0

我已經通過建議的日期格式在這裏,但沒有找到任何符合我的要求。如何將日期格式從05-JUN-99轉換爲050599?

我有以下日期格式:

05-JUN-99。 05爲dd,如日,JUN和1999年。

我被要求將其轉換爲mmddyy(兩位數月份,兩位數日期和兩位數字年份)。

任何想法如何做到這一點?

感謝您的幫助

+3

爲什麼6月份當月爲05?是錯字還是你正在尋找一些邏輯? –

+0

日期沒有格式。我懷疑你是以某種格式顯示日期的字符串。您需要將字符串轉換爲日期,然後返回到varchar以獲取所需的格式。但要小心。如果您使用無法轉換爲日期的數據執行此操作,則會引發錯誤。 –

回答

2

你可以在這裏使用convert

select convert(varchar(20),cast('05-JUN-99' as date),10) 

--Output: 06-05-99 

select replace(convert(varchar(20),cast('05-JUN-99' as date),10),'-','') 

--Output: 060599 

Date Styles from the documentation

+0

你真的應該包含varchar的長度,而不是依靠默認長度。 –

+0

@SeanLange, 太棒了! 完美工作。感謝您的及時迴應。 我一直在想它是錯誤的。 – Tairoc

+0

@SeanLange ..謝謝。我修改了查詢以包含長度。 –

1

我通常只是轉換爲字符串。獲取年份,月份,日期,將它們分別放入一個字符串中並進行協調。

Declare @InputValue Varchar(16) = '05-JUN-99' 
set @InputValue = replace(@InputValue,'-','/') 
declare @TestDate DateTime 
set @TestDate = convert(DateTime,@InputValue) 
select @TestDate 
select right ('0' + convert(Varchar(2),DATEPART(mm,@TestDate)),2) 
     + right ('0' + convert(Varchar(2),DATEPART(dd,@TestDate)),2) 
     + right ('0' + convert(Varchar(4),DATEPART(yy,@TestDate)),2) 
+0

你的意見不是OP所說的,他們的意見不符合他們的意見。 –

+0

@肖恩你是說我有我的月和日交換? –

+0

不,他說你的輸入字符串不是'05 -JUN-99',OP表示他的數據格式是 – Matt

2

我的投票使用格式SQL-SERVER 2012 +

SELECT FORMAT(CAST('05-JUN-99' AS DATETIME),'MMddyy') 

這意味着沒有嵌套內容替換,沒有多餘的投/轉換等保持它的整潔恕我直言

+0

我同意這很乾淨。只要這不使用表中的列,這應該可以正常工作。 FORMAT的表現令人震驚。對於一種情況或小數據集,它工作正常。:) –

+0

@SeanLange是的我想我沒有使用它在我的大型數據集中,因爲對於我來說,你不會將日期存儲爲日期,然後讓GUI執行格式化。我對性能的懷疑是它實際上是一個clr引用.Nets格式,所以當以這種標量方法應用時,性能會很糟糕。所以我會同意依賴於數據大小和性能需求 – Matt

+0

同意100000%關於根本不屬於數據庫的格式。我有一種感覺,clr程序比內置格式函數更適合性能,但是真正知道的人。 –

相關問題