ええと、なぜあなたのコラムはVARCHAR
?
DECLARE @n INT = 8;
SELECT Name FROM dbo.Test
WHERE @n BETWEEN CONVERT(INT, Value1) AND CONVERT(INT, Value2);
これらの列に他のジャンクがある場合は、SQL Serverがあなたを裏切って'ascfdgt'
整数に変換しようとするのを防ぐために、次のようなことをしなければならない場合があります。
DECLARE @n INT = 8;
SELECT Name FROM dbo.Test
WHERE ISNUMERIC(Value1) = 1
AND ISNUMERIC(Value2) = 1
AND @n BETWEEN CASE WHEN ISNUMERIC(Value1) = 1 THEN CONVERT(INT, Value1) END
AND CASE WHEN ISNUMERIC(Value2) = 1 THEN CONVERT(INT, Value2) END;
ここで、この列のデータ型を修正するか、これらの数値を別の列に格納してください。
パスして、 isとisのA12
行を見つける必要がある場合は、もう少し複雑になります。Value1
A010
Value2
A029
DECLARE @n VARCHAR(12) = 'A12';
SELECT Name FROM dbo.Test
WHERE ISNUMERIC(SUBSTRING(Value1, 2, 255)) = 1
AND ISNUMERIC(SUBSTRING(Value2, 2, 255)) = 1
AND CONVERT(INT, SUBSTRING(@n, 2, 255))
BETWEEN CASE WHEN ISNUMERIC(SUBSTRING(Value1, 2, 255)) = 1
THEN CONVERT(INT, SUBSTRING(Value1, 2, 255)) END
AND CASE WHEN ISNUMERIC(SUBSTRING(Value2, 2, 255)) = 1
THEN CONVERT(INT, SUBSTRING(Value2, 2, 255)) END;
それがどれほど醜いのか分かりますか?このようなスパゲッティクエリでコードベースを散らかす必要がないように、このひどいデザインを修正することを検討してください。