0

私が持っているフィルターが SQL クエリに動的にプラグインされているインスタンスがあり、それらが であるか であるintかを事前に判断できない場合がありますvarcharCASE WHENステートメントでどちらかを許可する方法はありますか?

私のテーブル(entエンティティ用)では、列 company は string/varcharで、entid列はint. CASE IsNumericint がフィルターである場合、または文字列がフィルターである場合、このステートメントを機能させることができないようです。

これは機能します:

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 を使用すると、何も返されません)。なぜそれが失敗しているのか分かりますか?

4

1 に答える 1

0

解決しました。私は実際の列について質問したことはありません - フィルターだけです。

select ent.entid, ent.company from ent where 

ent.entid in
(
    CASE IsNumeric(entid) WHEN 1 then '99' else 'ABIS, Inc.' End,
    CASE IsNumeric(entid) WHEN 1 then '1423' else 'Schulte Building Systems' End    
)

select ent.entid, ent.company from ent where 

ent.company in
(
    CASE IsNumeric(company) WHEN 1 then '99' else 'ABIS, Inc.' End,
    CASE IsNumeric(company) WHEN 1 then '1423' else 'Schulte Building Systems' End  
)

どちらも機能します。

于 2015-09-09T16:14:10.357 に答える