Das ist ein bisschen schwierig ist, weil Sie nicht über eine Umwandlung erhalten möchten Error. Die folgende Beschreibung ist diese verwalten:
select *
from set1
where 1 = (case when col = '' then 1
when col like '+[0-9][0-9[0-9]%' and isnumeric(col, left(5))
(case when cast(left(col, 5)) > 125 then 1 end)
when col like '+[0-9][0-9[0-9]%' and isnumeric(col, left(4))
(case when cast(left(col, 4)) > 125 then 1 end)
end)
Die zweite ist einfacher:
select *
from set2
where col like '%[.][0-9][0-9]%
Konvertierungen von Zeichenfolgen in Zahlen - ohne Fehler - ist mühsam in SQL Server. In fast allen Fällen haben Sie keine Ahnung von der Reihenfolge der Operationen. So erzeugt die folgenden häufig einen Fehler:
select s.*, cast(col as number)
from set1
where isnumeric(col);
weil die cast()
vor die isnumeric()
verarbeitet werden können. Die nur Anweisung, die die Reihenfolge der Verarbeitung steuert, ist case
, weshalb die erste Version case
in der where
Klausel großzügig verwendet. Hinweis: Unterabfragen und CTEs haben keinen Einfluss auf die Reihenfolge.
SQL Server 2012+ bietet die try_convert()
-Funktion, die Fehlerverarbeitung in Konvertierungen erleichtert.
Welche RDBMS verwenden Sie? – Mureinik
SQL SERVER 2008 – akhrot
@akhrot überprüfen Sie meine Antwort, es sollte für Sie arbeiten. –