2011-01-31 11 views
2

SQL Serverを使用してdatetimeで年、月、日のint値を変換する必要があります。SQLサーバでint値をdatetimeに変換する

は、実際に私はこの

DECLARE @MONTH INT 
DECLARE @YEAR INT 
DECLARE @DAY INT 
DECLARE @MAXDATE DATETIME 
DECLARE @MINDATE DATETIME 

SET @MONTH=12 
SET @YEAR=2010 
SET @DAY=1 


SET @MINDATE=CONVERT(DATE,CAST (@YEAR AS VARCHAR)+ RIGHT ('0'+ CAST (@MONTH AS VARCHAR),2) + RIGHT ('0'+ CAST (@DAY AS VARCHAR),2)) 

SELECT @MINDATE 

し、[OK]を作品を使用しています」が、これらの値を変換するためのより良い方法を存在する場合、私は思ったんだけど。

答えて

5

これは少し単純に次のようになります。

select dateadd(month,(@YEAR-1900)* 12 + @MONTH - 1,0) + (@DAY-1) 
それまでは
1

私は間違いなくこれを行う正しい方法があると思います。あなたはすでに1桁の月と日付の0を埋めています。あなたのソリューションはうまくいくでしょう。

他の唯一の方法は、任意の日付を使用し、その開始点に年、月、日を追加することです。しかし、これは素晴らしい計画ではありません。なぜなら、あなたは私の計算で12月31日に開始する必要があるからです。これは、現在行っているように、単にコンポーネントを解析するよりも意味がありません。

0

私はthere'sに詐欺機能が組み込まれて、それを変換しない方法を知っていません。 varchar型としてANDA日、月、年を宣言することが可能にit's場合は、それが簡単になります

SET DATEFORMAT YMD; 
SET @MAXDATE = @YEAR+'/'[email protected]+'/'[email protected] 
SELECT @MAXDATE 
+2

**これはSQL Server上で動作します。 「ドイツ語」の日付形式が有効になっていますか?私は非常にそれを疑う - あなたが(文字列の連結)のような何かを行う場合、**してください**:ISO - 8601形式を使用してください! 'YYYYMMDD' - それはどんな言語環境でも、どんなシステムでも動作します... –

1

あなたは「より良い方法」によって何を意味するかに応じて、許容異なる答えを見つけることができます。 たとえば、文字列からの変換は、スクリプト内での変換よりも簡単に(したがってより良い方法で)行うことができます。このように:あなたの変数がdatetimeであれば、ある

SET @MINDATE = CAST(@YEAR AS varchar) + '-' + 
       CAST(@MONTH AS varchar) + '-' + 
       CAST(@DAY AS varchar) 

は、変換がCONVERTを使用するには、暗黙的なので、不要になることはありません。ここで選択されたフォーマットはYYYY-MM-DD、またはむしろYYYY-M-Dです。私の知る限り、ロケール設定に関係なく暗黙的な変換が可能です。

編集:私が間違っていない場合は、選択したフォーマットYYYYMMDDもロケールに依存しません。私の要点は、整数から適切な文字列を作成するためには、より複雑な表現が必要であったことだけでした。これはあなたに不便を感じました。

関連する問題