私はSQL Serverデータベースを持っており、int列の最初の2つの数値のみに基づいて結果を返すクエリを定義します。以下のようなSQL Server WHERE句
何か:
SELECT * FROM myTable WHERE myIntColumn = 13%
だから13、133、134と1380との任意の行がちょうどvarchar型とパターンマッチに変更する、空想
私はSQL Serverデータベースを持っており、int列の最初の2つの数値のみに基づいて結果を返すクエリを定義します。以下のようなSQL Server WHERE句
何か:
SELECT * FROM myTable WHERE myIntColumn = 13%
だから13、133、134と1380との任意の行がちょうどvarchar型とパターンマッチに変更する、空想
何も返さないであろう。
SELECT * FROM myTable
WHERE CAST(myIntColumn as varchar(10)) LIKE '13%'
あなたは10の力によってdivde整数でしたが、それはあなたが文字列に数値を変換する必要がループや再帰
;WITH cTE AS
(
SELECT TOP 9
POWER(10, ROW_NUMBER() OVER (ORDER BY column_id)) AS divisor
FROM
sys.columns
)
SELECT
*
FROM
myIntColumn
JOIN
cTE ON myIntColumn/divisor = 13
です:
SELECT * FROM myTable WHERE convert(varchar, myIntColumn) like '13%'
を考慮に入れないということこのクエリはおそらくmyIntColumn
フィールドのインデックスの恩恵を受けることはありません。あなただけの検討のため
SELECT * FROM myTable WHERE myIntColumn like '13%'
(それが原因LIKEに暗黙的に行われます)、明示的に列をキャストする必要はありません
、あなたは速くなる可能性があり、同じ結果を達成するために数学を使用することができます
SELECT * FROM myTable
WHERE myIntColumn/NULLIF(POWER(10,LEN(myIntColumn)-2),0) = 13
パフォーマンスが問題になる場合は、変換済みの値を含む表にvarchar列を追加することを検討してください。この列にインデックスを追加すると、少し余分なストレージを犠牲にしてクエリを高速化する必要があります。 – Ray