É possível usar uma cláusula IF dentro de uma cláusula WHERE no MS SQL?
Exemplo:
WHERE
IF IsNumeric(@OrderNumber) = 1
OrderNumber = @OrderNumber
ELSE
OrderNumber LIKE '%' + @OrderNumber + '%'
sql
sql-server
tsql
Bryan Roth
fonte
fonte
CASE
é a solução apropriada na maioria dos casos. No meu caso, eu queria mudar o operador de comparação e, portanto, usei a próxima abordagem.Você deve conseguir fazer isso sem nenhum IF ou CASE
Dependendo do tipo de SQL, pode ser necessário ajustar as transmissões no número do pedido para um INT ou VARCHAR, dependendo do suporte a transmissões implícitas.
Essa é uma técnica muito comum em uma cláusula WHERE. Se você deseja aplicar alguma lógica "SE" na cláusula WHERE, tudo o que você precisa fazer é adicionar a condição extra com um AND booleano à seção em que ela precisa ser aplicada.
fonte
Você não precisa de uma declaração SE.
fonte
where (@AdmUserId is null or CurrentOrder.CustomerAdmUserId = @AdmUserId)
Ou único filtro se IncludeDeleted = 0:where (@IncludeDeleted = 1 or ItemObject.DeletedFlag = 0)
Não há uma boa maneira de fazer isso no SQL. Algumas abordagens que eu já vi:
1) Use CASE combinado com operadores booleanos:
2) Use IFs fora do SELECT
3) Usando uma cadeia longa, componha sua instrução SQL condicionalmente e use EXEC
A terceira abordagem é hedionda, mas é quase a única coisa que funciona se você tiver várias condições variáveis como essa.
fonte
IF...ELSE...
condicionais em booleanosAND
eOR
s, como na resposta @ njr101 acima. Desvantagem para ^ desta abordagem é que ele pode ser cérebro-fryingly difícil se você tiver muitosIF
s', ou se você tem muitos que são aninhadosUse uma instrução CASE em vez de IF.
fonte
Você deseja a instrução CASE
fonte
Eu acho que onde ... como / = ... caso ... então ... pode trabalhar com booleanos. Estou usando o T-SQL.
Cenário: Digamos que você deseja obter os hobbies da Pessoa-30 se bool for falso e os hobbies da Pessoa-42 se bool for verdadeiro. (De acordo com alguns, as pesquisas por hobby compreendem mais de 90% dos ciclos de computação dos negócios, portanto, preste muita atenção.)
fonte
fonte
IF P THEN Q ELSE R
<=>
( ( NOT P ) OR Q ) AND ( P OR R )
fonte
No caso de linha, a condição funcionará corretamente.
fonte
O exemplo a seguir executa uma consulta como parte da expressão booleana e, em seguida, executa blocos de instrução ligeiramente diferentes com base no resultado da expressão booleana. Cada bloco de instrução começa com BEGIN e termina com END.
Usando instruções IF ... ELSE aninhadas O exemplo a seguir mostra como uma instrução IF… ELSE pode ser aninhada dentro de outra. Defina a variável @Number como 5, 50 e 500 para testar cada instrução.
fonte
No servidor sql, eu tinha o mesmo problema. Eu queria usar uma instrução e apenas se o parâmetro for falso e, em verdadeiro, eu tinha que mostrar os valores verdadeiro e falso, então usei dessa maneira
fonte
Veja se isso ajuda.
fonte
fonte