В SQL Server 2012 У меня есть набор столбцов, которые определены как VARCHAR
. Значения являются пороговыми значениями для метрики и могут быть либо числами, либо строковыми значениями. Например, порогами для температуры являются числа 0
и 100
, тогда как пороги для двери будут open
и closed
.Как сравнить строку как целое число
Я хочу проверить значение [ResponseValue]
, чтобы узнать, находится ли оно между двумя пороговыми значениями определения, [Value_Threshold_min]
и [Value_Threshold_max]
. [ResponseValue]
может быть либо NUMERIC
, либо VARCHAR
, но всегда хранится как VARCHAR
. Threshold_max/min
хранятся как VARCHAR
.
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
Это не проверяет значения, которые являются числовыми. Например, 12, как говорят, находится между 100 и 200, потому что он оценивается как строка.
Я попытался проверить, является ли значение числовым, и если да, добавьте его в int, но это не выполняется, когда значение является буквенно-цифровым.
CASE WHEN isnumeric([Responses].[ResponseValue]) = 1
THEN CAST([Responses].[ResponseValue] as int)
ELSE [Responses].[ResponseValue] END)
BETWEEN steps.value_threshold_min AND steps.Value_Threshold_max THEN column _color
Как я могу рассматривать число как число и строку как строку при сравнении?
какая версия SQL, 2008, 2012, и т.д. – scsimon
сервера SQL 2012 –
Тогда обязательно использовать 'TRY_CONVERT()' вместо 'ISNUMERIC'. 'ISNUMERIC' может привести к ложным срабатываниям для этого ... т. Е. Попробуйте' SELECT ISNUMERIC ('1e4') ' – scsimon