次のT-SQLコード:
wt.clsdt_date >= CAST('1/1/' + CAST(2011 - 1 AS varchar) AS DateTime)
「1/1」とはどういう意味ですか?
次のT-SQLコード:
wt.clsdt_date >= CAST('1/1/' + CAST(2011 - 1 AS varchar) AS DateTime)
「1/1」とはどういう意味ですか?
(SQLの改善については、他の回答を参照してください。)
'1/1/'
は文字列であるため、後の結果の文字列+
は'1/1/year'
、たとえば
'1/1/' + CAST(2011 - 1 as varchar)
-> '1/1/' + '2010'
-> '1/1/2010'
次に、適切なタイプにキャスト(実際に変換)されます。
これを行うためのよりきれいな方法がない場合、私は驚きます。
SQL Server 2008以前の場合、特に優れた標準的な方法はないようです。
SQL Server 2012の場合、この関連するSOの投稿DATEFROMPARTS
に示されているとおりです。
SELECT DATEFROMPARTS(@Year, @Month, @Day)
これを行うためのはるかに安全な方法は次のとおりです。
WHERE wt.clsdt_date >= CONVERT(CHAR(4), 2011 - 1) + '0101';
明示的ににキャストする必要はありませんが、次のdatetime
ことができます。
WHERE wt.clsdt_date >= CONVERT(DATETIME, CONVERT(CHAR(4), 2011 - 1) + '0101');
これは非地域の日付形式を使用し、列のインデックスが存在する場合はそれも使用します。
この手法は、wt.clsdt_dateが2010年中または2010年以降であるかどうかを評価するために使用されます。これを達成するためのよりクリーンな方法は、次のとおりです。
YEAR(wt.clsdt_date) >= 2010