2016-06-21 16 views
3

日付の書式設定の要件は当初は単純に見えましたが、痛みを感じています。私はSQL Server 2012を使用していますが、2008年をサポートする必要があります。SQL Server固有の日付形式DD MM YYYY

参照(https://msdn.microsoft.com/en-GB/library/ms187928.aspx)CONVERTを使用してdatetimeをさまざまな形式の文字列としてフォーマットできますが、 DD MM YYYY回避策なし。どこかで見つからないそのリファレンスには含まれていないコードはありますか?

私は次のような回避策がありますが、T-SQLで賢明な方法があれば、これらを使用することは賢明ではありません。

SELECT REPLACE(CONVERT(varchar, GETDATE(), 103), '/',' ') 
SELECT RIGHT('0' + CONVERT(varchar, DATEPART(dd, GETDATE())), 2) + ' ' + RIGHT('0' + CONVERT(varchar, DATEPART(mm, GETDATE())), 2) + ' ' + CONVERT(varchar, DATEPART(yyyy, GETDATE())) 

コメントに続いて、例えば、入力日はそのため所望の出力は、私が「21 06 2016

+0

データのサンプルと必要な出力を表示してください。 – gofr1

+1

最初のものに何が問題なのですか? –

+0

@ gofr、何も追加していないかどうかはわかりませんが、具体的な日付の例が含まれています。 –

答えて

2

だろう(年= 2016、月= 06日= 21)、2016年6月21日になりますあなたの最初の提案と一緒に行って、最も適切だと思われます。

いくつかのテストデータを作成します。

IF OBJECT_ID('tempdb..#Dates') IS NOT NULL DROP TABLE #Dates 
GO 
CREATE TABLE #Dates (OriginalDate datetime) 
INSERT INTO #Dates (OriginalDate) 
VALUES 
('2016-01-01') 
,('2016-05-06') 
,('2016-08-09') 
,('2016-12-25') 

SELECT 
OriginalDate 
,REPLACE(CONVERT(varchar,OriginalDate,103),'/',' ') NewDate 
FROM #Dates 

結果;

OriginalDate    NewDate 
2016-01-01 00:00:00.000  01 01 2016 
2016-05-06 00:00:00.000  06 05 2016 
2016-08-09 00:00:00.000  09 08 2016 
2016-12-25 00:00:00.000  25 12 2016 
+0

入力いただきありがとうございます。私は答えとして私は何も良く見えることができませんに基づいてマークします。それが標準フォーマットとして見当たらないことに本当に驚いていました。かなり頻繁に来なければならない。 –

+0

そこにはスラッシュが入っていますが、残念ながらスペースはありません。ありがとう –

3

日付形式DD MM YYYYそのため、SQL Serverのそれのための書式コードが存在しない、(スペースなしピリオドのみで)「公式」形式ではありません。

質問に記載されている回避策、またはFORMAT関数(SQL Server 2012以降):FORMAT(GETDATE(), N'dd MM yyyy')を使用できます。

あり、他の回避策がありますが、それらのどれもが、このからくりを含め、美しいません:RIGHT('0' + CONVERT(VARCHAR(2), DAY(@date)), 2) + ' ' + RIGHT('0' + CONVERT(VARCHAR(2), MONTH(@date)), 2) + ' ' + CONVERT(VARCHAR(4), YEAR(@date))

別のオプションは、CLR機能を作成し、日付をフォーマットするために、.NETを使用することです。

カレンダーテーブルを作成し、目的のフォーマットのフィールドを追加することができます。このテーブルに参加すると、日付ごとに書式設定された文字列を取得できます。

一般的に、結果の書式はSQL Serverの責任ではなく、データを使用しているアプリケーションに移動します。

+0

アプリケーションはSQL Serverです - より大きなバッチのSQLの一部としてレポートテーブルの非正規化された値を更新しています。更新する追加アプリケーションはありません。 –

+0

フォーマットされた日付(および日付のみ)を持つ単一のフィールドを更新するか、または別のものと連結します。 「一般的に」という部分は、SQL Serverの外部で行うことを避けることができない場合があることを意味します。 – Pred

関連する問題