私が持っているフィルターが SQL クエリに動的にプラグインされているインスタンスがあり、それらが であるか であるint
かを事前に判断できない場合がありますvarchar
。CASE WHEN
ステートメントでどちらかを許可する方法はありますか?
私のテーブル(ent
エンティティ用)では、列 company は string/varchar
で、entid
列はint
. CASE IsNumeric
int がフィルターである場合、または文字列がフィルターである場合、このステートメントを機能させることができないようです。
これは機能します:
select
ent.company
from
ent
where
ent.company in
(CASE
WHEN IsNumeric(CONVERT(VARCHAR(100), 'ABIS, Inc.')) = 0
THEN CONVERT(VARCHAR(100), 'ABIS, Inc.')
ELSE '99'
END,
CASE
WHEN IsNumeric(CONVERT(VARCHAR(100), 'Schulte Building Systems')) = 0
THEN CONVERT(VARCHAR(100), 'Schulte Building Systems')
ELSE '1423'
END)
これは機能していません:
select
ent.company
from
ent
where
ent.entid in
(CASE
WHEN IsNumeric(CONVERT(VARCHAR(100), 'ABIS, Inc.')) = 0
THEN CONVERT(VARCHAR(100), 'ABIS, Inc.')
ELSE '99'
END,
CASE
WHEN IsNumeric(CONVERT(VARCHAR(100), 'Schulte Building Systems')) = 0
THEN CONVERT(VARCHAR(100), 'Schulte Building Systems')
ELSE '1423'
END)
...しかし、int equals の場合、0 を 1 に変更すると機能します (company equals を使用すると、何も返されません)。なぜそれが失敗しているのか分かりますか?