SQL Server à l'aide de caractères génériques DANS
Car je crois que cela devrait être une question de base, je sais que cette question a probablement été posée, mais je suis incapable de la trouver. Je suis probablement sur le point de gagner ma la Pression des Pairs badge, mais je vais la poser quand même:
Est-il un moyen de SQL Server que je ne connais pas pour l'utilisation du caractère générique % lors de l'utilisation DANS.
Je me rends compte que je peux l'utiliser OU est comme:
select *
from jobdetails
where job_no like '0711%' or job_no like '0712%'
et, dans certains cas, je peux utiliser une sous-requête comme:
select *
from jobdetails
where job_no in (select job_no from jobs where job_id = 39)
mais j'ai envie de faire quelque chose comme ce qui suit:
select *
from jobdetails
where job_no in ('0711%', '0712%')
Dans ce cas, il utilise le signe " % " comme un caractère à la place d'un caractère générique si aucune ligne n'est retournée. Actuellement, j'utilise juste un tas de OU de quand je dois faire cela, mais je sais qu'il y a à être une meilleure façon. Quelle méthode utilisez-vous pour cela?
Vous devez vous connecter pour publier un commentaire.
Comment sur:
Comment quelque chose comme cela?
Je pense avoir une solution à ce que l'initiateur de cette enquête voulais en forme simple. Il fonctionne pour moi et en fait c'est la raison pour laquelle je suis ici pour commencer. Je crois simplement à l'aide de parenthèses autour de la colonne like '%texte% " en combinaison avec
OR
de la volonté de le faire.Vous pouvez essayer quelque chose comme ceci:
Pas exactement ce que vous demandez, mais il a le même effet, et est flexible dans d'autres façons aussi 🙂
J'ai eu un semblable de but et en est venu à cette solution:
Je suis en supposant que vos différents codes ('0711%', '0712%', etc), y compris le % de, sont stockées dans un tableau, que je vais appeler *table_of_codes*, avec le champ code.
Si le % n'est pas stockée dans la table de codes, juste concaténer le '%'. Par exemple:
La méthode concat() la fonction peut varier en fonction de la base de données, pour autant que je sais.
J'espère que cela aide. Je me suis adapté à partir de:
http://us.generation-nt.com/answer/subquery-wildcards-help-199505721.html
J'ai d'abord ajouté un arrêt statique de la table avec TOUTES les possibilités de mon génériques résultats
(cette société a une 4 de caractères de type nvarchar code que leurs localités et qu'ils génériques de leurs habitants)
c'est à dire qu'ils peuvent avoir 456? ce qui leur donnerait 456[1] à 456, [Z] - je.e 0-9 & a-z
J'ai dû écrire un script à tirer de l'utilisateur actuel (déclarer) et retirer les masques pour la déclaration de l'utilisateur.
Créer des tables temporaires, juste de base pour classer les numéros de ligne pour cet utilisateur actuel
en boucle sur chaque résultat (VOTRE Ou ceci Ou cela etc...)
Insérer dans la Table de test.
Voici le script que j'ai utilisé:
Comme Jeremy Smith l'a posté, je vais récapituler, puisque je ne pouvais pas répondre à cette question particulière de son.
Si vous avez juste besoin
0711%
et0712%
vous pouvez également placer une des plages à l'intérieur des parenthèses. Pour leNOT
mot-clé vous pouvez également utiliser[^1-2]%
La
IN
opérateur n'est rien mais une fantaisieOR
de '=' les comparaisons. En fait, il est tellement "rien, mais" dans SQL 2000 il y a eu un débordement de pile bug à cause de l'expansion de laIN
enOR
s lorsque la liste contient environ 10k entrées (oui, il y a des gens qui écrivent des 10k DANS les entrées...). Si vous ne pouvez pas utiliser des jokers en elle.Dans l'Accès SQL, je voudrais utiliser ce. J'imagine que SQLserver a la même syntaxe.
select *
de jobdetails
où job_no comme "0711*" ou job_no comme "0712*"
Vous avez la réponse dans votre question. Vous ne pouvez pas passer directement générique lors de l'utilisation DANS. Toutefois, vous pouvez utiliser une sous-requête.
Essayez ceci:
Je sais que cela semble fou, que vous pouvez s'en tenir simplement à l'aide OU dans votre clause where. pourquoi la sous-requête? Comment jamais, la sous-requête approche sera utile lorsque vous devez faire correspondre les détails à partir d'une source différente.
Raj
Essayer cette
le seul problème est que
job '0713'
va être retournésalors pouvez utiliser
'07299999999999'
ou tout simplement ajouterand job_no <> '0713'
Dan zamir
Ce pourrait être la solution la plus simple d'utilisation
like any
Dans Teradata cela fonctionne bien.
like any
partie de la norme SQL langage? Je ne suis pas capable de l'utiliser.