2
SQL Serverのyear()
の戻り値を見ると、intのようです。SQL Serverのintとstringの比較は同じですか?
次に、次のステートメントは 'equal'を返します。
なぜ比較演算子は、2002
のintと'2002'
の文字列が等しいと考えていますか?すべき?
select
case
when year('2002-01-14 00:00:00.000') = '2002' then 'equal'
else 'not equal'
end
はい、SQL Serverはインプリメンテーションキャストを行い、 '2002'をintに変更しています。常に2番目のデータ型を最初のデータ型にキャストしようとします。 – xQbert
何か起こるべきかどうかは関係ありません。何が問題なのか、それに応じてコードするかを知っていることです。 –
良い質問と@xQbertからの素敵な答えです。 [暗黙的なキャスト](https://www.sqlskills.com/blogs/jonathan/implicit-conversions-that-cause-index-scans/)の使用に対しては、いくつかの非常に優れた議論があります。一般的なルールとして、私は自分のdbsでそれらを避けようとします。 –