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 № 1Jeś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.