Comment interrogez-vous une colonne int pour une valeur?
Comment pouvez-vous vous interroger une colonne pour n'importe quelle valeur dans cette colonne? (ie. Comment puis-je construire une dynamique où la clause que vous pouvez filtrer la valeur, ou pas.)
Je veux être capable de faire une requête pour une valeur spécifique, ou pas. Par exemple, je pourrais que la valeur à 1, mais j'aimerais qu'il soit un nombre quelconque.
Est-il un moyen d'utiliser un joker ( " * " ), pour correspondre à n'importe quelle valeur, de sorte qu'il peut être dynamiquement inséré à l'endroit où je veux pas de filtre?
Par exemple:
select int_col from table where int_col = 1 // Query for a specific value
select int_col from table where int_col = * // Query for any value
La raison pour laquelle je ne veux pas utiliser de séparer les 2 instructions SQL est parce que je suis en utilisant cela comme une Source de Données SQL, qui ne peut avoir que 1 instruction select.
source d'informationauteur Bill
Vous devez vous connecter pour publier un commentaire.
- Je prendre ce que vous voulez de comportement dynamique sur votre
WHERE
clause, sans avoir à dynamiquement construire votreWHERE
clause.Avec un seul paramètre, vous pouvez utiliser
ISNULL
(ouCOALESCE
) comme ceci:qui permet à un
NULL
paramètre pour correspondre à tous. Certains préfèrent le plus long, mais plus explicite:Une réponse simple serait d'utiliser: n'EST PAS NULLE. Mais si vous demandez dire 123* pour les nombres comme 123456 ou 1234 ou 1237 alors vous pourriez convertir en varchar et puis test contre l'utilisation de la norme des cartes sauvages.
Dans votre clause where:
cast(myIntColumn as varchar(15)) like '123%'
.En supposant que la valeur que vous êtes le filtrage est un paramètre à une procédure stockée, ou contenue dans une variable appelée
@Value
vous pouvez le faire comme ceci:Si
@Value
est null leor
partie de la clause est ignoré, de sorte que la requête ne filtre sur intCol.L'équivalent de caractères génériques pour les nombres sont les éléments de comparaison.
Donc, si vous voulez trouver tous les entiers positifs:
tout nombre entre une centaine et un millier d':
et ainsi de suite.
Je ne comprends pas très bien ce que vous demandez. Je pense que vous devriez utiliser deux requêtes différentes pour les différentes situations que vous avez.
Lorsque vous n'êtes pas à la recherche pour une valeur spécifique:
Lorsque vous êtes à la recherche pour une valeur spécifique:
Vous pouvez utiliser le paramètre comme un caractère générique en attribuant une signification particulière à NULL:
De cette façon, lorsque vous passez NULL; vous obtenez toutes les lignes.
Si la valeur NULL est une valeur valide pour la requête, alors vous devez utiliser les deux paramètres.
Si vous voulez vraiment la valeur de votre colonne pour toutes les lignes sur la table que vous pouvez simplement utiliser
Si vous voulez connaître toutes les valeurs distinctes, mais ne se soucient pas combien de fois ils sont répétés, vous pouvez utiliser
Et si vous voulez connaître toutes les valeurs distinctes et combien de fois ils apparaissent, utilisez
Pour avoir les valeurs triées correctement, vous pouvez ajouter
à toutes les requêtes ci-dessus.
De partager et de profiter.