このクエリをSQLServerで実行したいのですが、機能しませんでした:
Select Nom from tab
WHERE
Nom LIKE
CASE WHEN libelle !='' then
Nom1
OR
Nom2
else
Nom3
end
どんな助けでも感謝されます
更新:OPコメントから追加:
libelleがnom1やnom2のように空でないかどうかを確認したいelse(libelleが空の場合)nom3のようにnom
このクエリをSQLServerで実行したいのですが、機能しませんでした:
Select Nom from tab
WHERE
Nom LIKE
CASE WHEN libelle !='' then
Nom1
OR
Nom2
else
Nom3
end
どんな助けでも感謝されます
更新:OPコメントから追加:
libelleがnom1やnom2のように空でないかどうかを確認したいelse(libelleが空の場合)nom3のようにnom
私はそれがここに行く正しい方法だとは思わないcase
ので、私はこれをもっと次のように見ています:
select Nom
from tab
where (
libelle != ''
and (
Nom like Nom1
or Nom like Nom2
)
)
or (
libelle = ''
and Nom like Nom3
)
私には、これは読みやすく理解しやすいように思えます。クエリオプティマイザも同意するかもしれません。
SELECT Nom
FROM tab
WHERE
1 = CASE
WHEN libelle != '' AND (Nom like Nom1 OR Nom like Nom2) THEN 1
WHEN libelle = '' AND Nom like Nom3 THEN 1
ELSE 0
END
(他のオプションと非常によく似ています-特にTimのもの)
したがって、動的SQLを実行しようとしているのですが、caseステートメントを使用してそのように実行できるとは思いませんが、これは機能する可能性があります。
declare @sql nvarchar(100)
declare @libelle nvarchar(20)
--Set @libelle to something (can be via a query, or a stored proc parameter etc rather than just a string like here
set @libelle = ''
set @sql = 'SELECT Nom FROM tab WHERE Nom LIKE'
IF @libelle = ''
SET @sql = @sql + ' ''Nom3'''
ELSE
SET @sql = @sql + ' ''Nom1'' OR Nom LIKE ''Nom2'''
EXEC (@sql)
これにより、少なくとも正しい道を歩むことができます。
構文は次のとおりです。
CASE WHEN libelle != '' THEN Nom1
WHEN libelle /* OTHER CONDITION HERE */ THEN Nom2
ELSE Nom3
END