Q. SELECT文による全件取得時は「㉑」以降を含んだすべてのレコードを取得できますが、WHERE 句を使っての条件抽出時は「㉑」以降を含んだレコードを抽出できません。「㉑」以降をWHERE句 で抽出する方法はありますでしょうか?
サーバー上のデータ例

《⑳を取得》 《㉑を取得》

考えられる要因
まず、丸付き数値(①など)の文字コードについて整理します。
「①~⑳」 :シフトJISコードとUnicodeの双方に存在します。
「⓪、㉑~㊿」 :Unicodeにのみ存在します。
丸付き51以上 :現在ありません。
項目「商品名」はNVARCHAR 型であるのに対して、上記のSQL文は、
「'⑳' および '㉑'」をシフト JISで指定しています。
《項目定義》

このようにデータ型が不一致の場合は、DBMSが「暗黙の型変換」を行います。
暗黙の型変換(シフトJIS → Unicode)の結果
'⑳' → '⑳'
'㉑' → ''
シフトJISに㉑が存在しないため、正しく型変換されません。
対処方法
比較条件などで、左辺のデータ型に右辺のデータ型を合わせるようにSQL文を記述をします。
参考事例を掲載します。
《 参考事例》

※補足※
暗黙の型変換は便利ですが、そもそも正常に動作しない場合があります。
また、DBMS側が事前にその処理を実行することで、パフォーマンスに影響が出る場合もあります。
左辺と右辺でデータ型を合わせるようにSQL文を記述することで、余計なトラブルを
回避することできます。
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
補足説明:MS SQL
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
オンラインヘルプの改善にご協力ください。
このページは役に立ちましたか?