1

次のT-SQLコード:

wt.clsdt_date >= CAST('1/1/' + CAST(2011 - 1 AS varchar) AS DateTime)

「1/1」とはどういう意味ですか?

4

3 に答える 3

3

(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)
于 2012-06-08T18:57:11.617 に答える
3

これを行うためのはるかに安全な方法は次のとおりです。

WHERE wt.clsdt_date >= CONVERT(CHAR(4), 2011 - 1) + '0101';

明示的ににキャストする必要はありませんが、次のdatetimeことができます。

WHERE wt.clsdt_date >= CONVERT(DATETIME, CONVERT(CHAR(4), 2011 - 1) + '0101');

これは非地域の日付形式を使用し、列のインデックスが存在する場合はそれも使用します。

またvarchar、長さがないのは悪い習慣です。

于 2012-06-08T19:12:32.950 に答える
2

この手法は、wt.clsdt_dateが2010年中または2010年以降であるかどうかを評価するために使用されます。これを達成するためのよりクリーンな方法は、次のとおりです。

YEAR(wt.clsdt_date) >= 2010
于 2012-06-08T19:03:25.687 に答える