에는 VARCHAR
으로 정의 된 열 집합이 있습니다. 값은 메트릭에 대한 임계 값이며 숫자 또는 문자열 값이 될 수 있습니다. 예를 들어 온도 임계 값은 0
및 100
이며 문에 대한 임계 값은 open
및 closed
입니다.문자열을 정수로 비교하는 방법
두 개의 임계 값 ([Value_Threshold_min]
및 [Value_Threshold_max]
) 사이에 값이 있는지 확인하려면 [ResponseValue]
값을 테스트하고 싶습니다. [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 인 경우 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
비교할 때 숫자를 숫자로, 문자열을 문자열로 처리하려면 어떻게해야합니까? 일부 값은 문자열과 일부의 int가있는 경우는, 문제가 발생할 수 있습니다
SELECT responsevalue,
(CASE WHEN r.ResponseValue BETWEEN convert(int, s.value_threshold_min) AND convert(int, s.Value_Threshold_max)
ELSE . . .
END) column_color
FROM steps s JOIN
responses r
on r.stepid = s.id
WHERE stepid = 4447;
-이조차 할 수 있습니다
버전을 2008 년, 2012 년 등 2012 – scsimon
SQL 서버)' ISNUMERIC 대신에. 'ISNUMERIC'은 위양성을 유발할 수 있습니다. 즉'SELECT ISNUMERIC ('1e4')'시도 –
그런 다음 확실히'TRY_CONVERT를 (사용 – scsimon