2016-11-11 7 views
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 

Microsoft's Year Doc.

+3

はい、SQL Serverはインプリメンテーションキャストを行い、 '2002'をintに変更しています。常に2番目のデータ型を最初のデータ型にキャストしようとします。 – xQbert

+1

何か起こるべきかどうかは関係ありません。何が問題なのか、それに応じてコードするかを知っていることです。 –

+1

良い質問と@xQbertからの素敵な答えです。 [暗黙的なキャスト](https://www.sqlskills.com/blogs/jonathan/implicit-conversions-that-c​​ause-index-scans/)の使用に対しては、いくつかの非常に優れた議論があります。一般的なルールとして、私は自分のdbsでそれらを避けようとします。 –

答えて

2

SQLサーバーは、暗黙的平等のチェックの最初の値のデータ型に「2002」をキャストしているため。 (int)この場合