日付をyyyymmdd
形式に変換するために推奨されるSQLコマンドはどれですか?
convert(varchar(8), getdate(), 112);
またはconvert(varchar, getdate(), 112)
2つ目を使用すると、日付の後に2つのスペースが追加されることに気づきました。 (例:[20130705
]-値20130705
の後の2つのスペースに注意してください)
最初のSQLステートメントを使用することをお勧めしますか?
デフォルトでは 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を返すことがわかります。
ラージ