ddmmyyyy
は有効な日付形式ではありません。最初にその文字列を DATE
として解析できるものにする必要があります / DATETIME
.最も簡単な方法は、単純に SUBSTRING
にすることです ピースを mm/dd/yyyy
に フォーマット。それは正常に変換されます。しかし、あなたは VARCHAR(8)
を持っています .したがって、それを VARCHAR(10)
になるように増やす必要があります (あるいは、CHAR(10)
だけでも構いません) )、または変更された値を保持するローカル変数を宣言します。
例:
DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';
DECLARE @Date2 CHAR(10);
SET @Date2 = SUBSTRING(@Date, 3, 2)
+ '/' + SUBSTRING(@Date, 1, 2)
+ '/' + SUBSTRING(@Date, 5, 4);
SELECT @Date2, CONVERT(DATE, @Date2);
-- 03/25/2014 2014-03-25
編集: 実は、もう少し簡単な方法を見つけました。この方法で始めましたが、ddmmyyyy
では機能しないことに気付きました mmddyyyy
とは対照的に . dd/mm/yyyy
に適切な日付スタイル番号があったことをなぜか見逃していました .したがって、受信文字列に 2 つのスラッシュを追加して、CONVERT
を呼び出すだけです。 動作しますが、103
を使用する場合のみです 「スタイル」として。最初の解決策と同様に、受信パラメータを VARCHAR(10)
に変更する必要があります または CHAR(10)
VARCHAR(8)
の代わりに 、または CHAR(10)
になるローカル変数を作成する .
DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';
DECLARE @Date2 CHAR(10);
SET @Date2 = STUFF(STUFF(@Date, 3, 0, '/'), 6, 0, '/');
SELECT @Date2, CONVERT(DATE, @Date2, 103); -- 103 = dd/mm/yyyy
-- 25/03/2014 2014-03-25
変換の「スタイル」は、CAST and CONVERT の MSDN ページにあります。> .