3 votes

Commande SQL courte pour retourner vrai si aucun champ ne contient une chaîne de caractères ?

Je voudrais avoir une forme courte de la commande SQL (j'utilise Oracle SQL).

SELECT * from table1 
WHERE field1 not like '%test%' 
AND field2 not like '%test%' 
AND field3 not like '%test%'

Existe-t-il une syntaxe équivalente à cette commande ? Je pensais à quelque chose comme

SELECT * from table1 
WHERE '%test%' not in (field1, field2, field3)

mais cette syntaxe ne fonctionne malheureusement pas ! Merci beaucoup pour tous les conseils et suggestions.

5voto

JV. Points 2098

Désolé mon pote, je ne pense pas que vous trouverez une déclaration plus courte ou plus simple que la première déclaration de votre question.

4voto

Mark Byers Points 318575

Non, ce n'est pas vraiment possible.

Cette transformation utilise l'une des Les lois de Morgan est très légèrement plus courte, mais il n'y a que quelques caractères de différence :

SELECT *
FROM table1 
WHERE NOT (field1 LIKE '%test%' OR
           field2 LIKE '%test%' OR 
           field3 LIKE '%test%')

Il y a aussi ce hack qui est encore plus court, mais je le déconseille parce qu'il vous donnera une réduction des performances de votre requête et introduira la possibilité d'un bug si vous changez la chaîne littérale '%test%' à quelque chose qui pourrait contenir un trait de soulignement, par exemple '%te_st%' :

SELECT *
FROM table1 
WHERE (field1 + '_' + field2 + '_' + field3) NOT LIKE '%test%'

Je pense que ce que vous faites déjà est la meilleure solution.

1voto

Marc B Points 195501
SELECT CASE WHEN (
    (field1 NOT LIKE '%test%') AND
    (field2 NOT LIKE '%test%') AND
    (field3 NOT LIKE '%test%')
THEN true
ELSE false AS truthiness

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X