2017-03-01 2 views
-3

期間のリストを月の最初の日に変換しようとしています。期間と新しい出力の例を以下に示します期間を月の初日に換算します。

Period new_date 
DEC-16 01/12/2016 
JAN-17 01/01/2017 
FEB-17 01/02/2017 

私はいくつかのことを試しましたが、さまざまなタイプに固執しています。私はまた、非常に大きなテーブルのための最も効率的な方法でそれをしたい。

私は私の前の回答のため

+2

そこで問題は、ここでは何、これを試してみてください?あなたが試したことを私たちに見せて、あなたが好きではない結果が何であったか教えてください。あなたは特定の質問をする必要があります。私たちはあなたのために仕事をするつもりはありません。 –

+0

これはピリオドではなく、単なる文字列です。その前に '01-'をつけて、日付にキャストします。これは、あなたがY2Kの問題を気にしない英語のロケール*と*を使用していることを前提としています。 –

+0

質問はどのように私はその文字列を日付に変換するのですか? – user2772056

答えて

0

申し訳ありませんが、SQLサーバーでこれをやっている、私は誤解しました。あなたは代わりに、これをしたい:

SELECT [Period], DATEADD(
    Month, 
    CASE LEFT([Period], 3) WHEN 'JAN' THEN 1 WHEN 'FEB' THEN 2 WHEN 'MAR' THEN 3 WHEN 'APR' THEN 4 WHEN 'MAY' THEN 5 WHEN 'JUN' THEN 6 WHEN 'JUL' THEN 7 WHEN 'AUG' THEN 8 WHEN 'SEP' THEN 9 WHEN 'OCT' THEN 10 WHEN 'NOV' THEN 11 WHEN 'DEC' THEN 12 END - 1, 
    DATEADD(Year, CAST(SUBSTRING([Period], 5, 100) as int), '2000-01-01')) AS [new_date] 
FROM (
    SELECT 'DEC-16' as [Period] 
    UNION ALL SELECT 'JAN-17' AS [Period] 
    UNION ALL SELECT 'FEB-17' AS [Period] 
) AS [TEST] 
+0

同じ質問の複数回答のポイントは何ですか?それらのうちの1つが間違っている場合は、それらをまとめて編集/削除し、新しい情報を追加する必要があります。 –

-2

SELECT DATEADD(月、DATEDIFF(月、0、キャスト( '1 - ' +左(期間、3)+右(ピリオド、3)日付など))、0) StartOfMonth AS [TABLE_NAME]

0

から

declare @t table(Period varchar(50)) 
insert into @t VALUES 
('DEC-16') 
,('JAN-17') 
,('FEB-17') 


select Period, cast('01-'+Period as date) new_Date 
from @t 
関連する問題