2016-08-03 38 views
0

一個日期我有一個char列存儲日期爲yyyy-mm-dd。我需要顯示這些日期爲mm-dd-yyyy顯示存儲在SQL Server作爲字符YYYY-MM-DD爲MM-DD-YYYY

在此先感謝。

+2

如果可能的話,你應該總是使用適合工作的正確的數據類型。在字符串中存儲日期允許超出範圍錯誤(2016-12-32是有效的字符串)。這也使得難以執行這樣的簡單操作。閱讀上的[字符串函數(https://msdn.microsoft.com/en-gb/library/ms187748.aspx),如果您確信您的所有數據如下exacte YYYY-MM-DD格式。 –

回答

4

你的問題的根源是因爲你使用了錯誤的數據類型。日期應該保存爲日期。除此之外,任何事情都不過是一件痛苦的事情。要獲得格式,您首先必須將您的字符串轉換爲日期,以便您可以對其進行格式設置 。

下面是一個例子。

select convert(date, YourDateColumn, 101) 

您可以在這裏閱讀更多關於轉換的信息。 https://msdn.microsoft.com/en-us/library/ms187928.aspx

+0

僅供鏈接回答? – techspider

+2

我不會說這是一個鏈接唯一的答案。我建議他們需要使用CONVERT來解決糟糕的設計決策。我將舉一個例子。 :) –

2

如果2012+你可以嘗試

Select Format(GetDate(),'MM-dd-yyyy') 

返回

2016年8月3日

要轉換的字符串

Select Format(cast('2016-08-03' as date),'MM-dd-yyyy') 
+1

這會產生所需的結果,但Format函數非常慢。所以這不太可能在大型數據集上表現良好。沒有辦法會超快,但格式太慢了。 http://sqlperformance.com/2015/06/t-sql-queries/format-is-nice-and-all-but –

+0

@SeanLange感謝您的聯繫和尖端。我傾向於不使用格式,恕我直言,格式應該在表示層完成。 –

+0

我同意100%格式化應該在數據庫之外完成! –

0
DECLARE @Date varchar(12)='2012-01-29' 
SELECT FORMAT(CONVERT(datetime,LEFT(@Date,4) + SUBSTRING(@Date,6,2) + SUBSTRING(@Date,9,2)), 'MM-dd-yyyy', 'en-US') AS Result 

這是一個小重一點在處理,但它的作品。

此答案還假設全部日期文本列中的值格式爲YYYY-MM-DD。如果你有任何沒有被格式化爲字符串的值,那麼你會遇到問題。

顯然,你需要與你的約會文本列的名稱來代替@date變量。我想提供一個可以輕鬆運行以查看答案的示例。

相關問題