/ / SQL Server - Wybierz między dwoma zakresami numerów w polu varchar z tekstem i liczbami - sql, sql-server-2008, sql-server-2005, sql-server-2008-r2, sql-server-2000

SQL Server - Wybierz między dwoma zakresami liczb w polu varchar z tekstem i liczbami - sql, sql-server-2008, sql-server-2005, sql-server-2008-r2, sql-server-2000

Mam tabelę z zakresami liczb od 0-2000000. Mogę użyć instrukcji między, by uzyskać zapisy rzeczy, jeśli zrobię MIĘDZY 50 I 100. To działa.

Ale od tego problemu napotykamkolumna jest varchar jeśli istnieją jakieś rekordy z czymś w ciągu jako "1FD32", nie mogę wybrać między nim.Konserwator SQL nie może przekonwertować "MIĘDZY 50 I 100", ponieważ szuka int. Jak mogę uzyskać wszystkie rekordy pomiędzy tymi zakresami i zignorować je wszystkimi literami?

Odpowiedzi:

5 dla odpowiedzi № 1

Jeśli chcesz wykonać porównanie numeryczne, jedynym sposobem na zagwarantowanie braku błędu jest użycie CASE komunikat. Jest to jedyne polecenie SQL gwarantujące kolejność wyceny (gdy nie jest używane z funkcjami agregującymi).

Oto kod, który zadziała:

select *
from t
where (case when isnumeric(col) = 1 then cast(col as bigint) end) between 20 and 100

Zwróć uwagę, że jeśli twoje liczby zawierają liczby dziesiętne, będziesz chciał użyć DECIMAL lub FLOAT zamiast.