web-dev-qa-db-ja.com

日付をyyyymmdd形式に変換します

日付をyyyymmdd形式に変換するために推奨されるSQLコマンドはどれですか?

  1. convert(varchar(8), getdate(), 112);または
  2. convert(varchar, getdate(), 112)

2つ目を使用すると、日付の後に2つのスペースが追加されることに気づきました。 (例:[20130705]-値20130705の後の2つのスペースに注意してください)

最初のSQLステートメントを使用することをお勧めしますか?

7
Jack

デフォルトでは MSDNに記載 のように、varcharに長さが指定されていない場合、CASTまたはCONVERTを使用する場合はデフォルトで30になり、変数として宣言する場合はデフォルトで1になります。

実証するには、これを試してください:

_DECLARE @WithLength varchar(3),@WithoutLength varchar;
SET @WithLength = '123';
SET @WithoutLength = '123';

SELECT @WithLength,@WithoutLength
_

SQL Serverは警告なしで静かに値を切り捨てるため、これは非常に危険であり、予期しないバグにつながる可能性があります。

ただし、所定のシナリオで問題のトピックにアクセスしても、長さの有無にかかわらず、2つのステートメントに違いはありません。また、あなたが話している2つの末尾のスペースを確認できません。これを試して:

_SELECT CONVERT(varchar(8), GETDATE(), 112) 
UNION ALL 
SELECT DATALENGTH(CONVERT(varchar(8), GETDATE(), 112)) 
UNION ALL 
SELECT CONVERT(varchar, GETDATE(), 112)
UNION ALL
SELECT DATALENGTH(CONVERT(varchar, GETDATE(), 112))
_

DATALENGTH()関数がどちらの場合も8を返すことがわかります。

ラージ

16
Raj