In SQL Server 2012 habe ich eine Reihe von Spalten, die als VARCHAR
definiert sind. Die Werte sind Schwellenwerte für eine Metrik und können entweder Zahlen oder Zeichenfolgenwerte sein. Zum Beispiel sind die Schwellenwerte für die Temperatur die Nummern 0
und 100
, wohingegen Schwellenwerte für die Tür open
und closed
wären.So vergleichen Sie eine Zeichenfolge als Ganzzahl
Ich möchte einen Wert [ResponseValue]
testen, um zu sehen, ob es zwischen zwei definierten Schwellenwerten liegt, [Value_Threshold_min]
und [Value_Threshold_max]
. Die [ResponseValue]
kann entweder NUMERIC
oder VARCHAR
sein, wird aber immer als VARCHAR
gespeichert. Die sind als VARCHAR
gespeichert.
SELECT responsevalue
, (CASE WHEN ResponseValue BETWEEN steps.value_threshold_min AND steps.Value_Threshold_max else END THEN column_color
FROM steps
JOIN responses on responses.stepid = steps.id
WHERE stepid = 4447
Dies testet Werte, die numerisch sind, nicht ordnungsgemäß. Zum Beispiel soll 12 zwischen 100 und 200 liegen, da es als String ausgewertet wird.
Ich habe versucht zu überprüfen, ob der Wert numerisch ist und wenn ja, es in int konvertieren, aber das scheitert immer, wenn der Wert alphanumerisch ist.
Wie kann ich eine Zahl als Zahl und Zeichenfolge als Zeichenfolge beim Vergleich behandeln?
, welche Version von SQL 2008, 2012, etc. – scsimon
SQL Server 2012 –
dann definitiv 'TRY_CONVERT verwenden()' anstelle von 'ISNUMERIC'. "ISNUMERIC" kann dazu führen, dass das Ergebnis falsch ist ... d. H., Versuche 'SELECT ISNUMERIC (' 1e4 ')' – scsimon