Dans mon application de base de données, j'ai l'intention de donner aux utilisateurs une possibilité de recherche simple modèle global en plus de la recherche standard de texte littéral. (Ne mentionnons pas d'autres options de recherche pour garder cette question simple.)
Ils pourront utiliser des caractères génériques *
, ?
et [
...]
pour la correspondance des caractères. Jo*n
correspondra à John
, Jon
ou Johann
. Un tel modèle entré sera converti en COMME pour les requêtes T-SQL, en RLIKE = dans les requêtes MariaDB et VB.NET Like ou invocation C # LikeString () pour la recherche en mémoire.
Est-il acceptable d'amener les utilisateurs à se familiariser avec les caractères génériques *
et ?
si ceux-ci (utilisés dans SQL-89) ont été abandonnés depuis la norme SQL-92 en faveur de %
et _
?.
Honnêtement, je pense que pour les utilisateurs non avancés, *
et ?
convient mieux que %
et _
parce que:
%
et _
, il est donc moins nécessaire de les échapper%
et _
qui sont un peu ambigus (50%
peut amener les utilisateurs inexpérimentés à penser que c'est un littéral)*
est directement disponible à la clé * sur le pavé numérique, tandis que tous les autres doivent appuyer sur Shift.Y a-t-il de vraies raisons pour lesquelles je devrais favoriser %
et _
? Si SQL-92 est passé à eux, peut-être qu'ils avaient des raisons.
Quelle est votre interface?
Les utilisateurs saisissent-ils directement les instructions SQL SELECT
? Si oui, vous devez utiliser %
et _
parce qu'ils font partie du standard SQL et que l'utilisateur attend du SQL standard.
Les utilisateurs saisissent-ils des termes de recherche dans une application, qui utilise accessoirement une base de données SQL comme moteur de recherche? Dans ce cas, utilisez *
et ?
comme caractères génériques, car c'est ce à quoi ils sont habitués à partir d'autres applications.
Vos utilisateurs connaissent-ils mieux la syntaxe SQL ou la syntaxe des moteurs de recherche? S'il y a un fort penchant dans un sens ou dans l'autre, il y a votre réponse.
Quant à savoir pourquoi SQL a changé?
C'est juste ma supposition
select *
from table
Le * signifie toutes les colonnes et ils ne voulaient pas utiliser * pour deux choses
Deuxièmement, je pense que vous rechercheriez un littéral * plus souvent que%
Disons que vous choisissez% pour le caractère générique
S'ils saisissent un *, afficher un message d'avertissement
Rappel dans nom du produit% est le caractère générique - pas *
ou si l'entrée?
Rappel dans nom du produit _ est le caractère générique - pas?
Si vous allez choisir *? puis inversez simplement les rappels
Si vous voulez vraiment colorer les jokers comme ils les entrent
J'ai un produit qui est entré dans un nouvel espace commercial et cet espace a été utilisé pour *? et le produit utilisé% _. Plutôt que de diviser le produit, nous sommes allés avec les messages d'avertissement,
Certaines personnes connaissant bien l'informatique supposeraient que *
et ?
et les personnes connaissant les bases de données supposeraient %
et _
et le grand public supposerait que l'ordinateur est suffisamment intelligent pour lire dans vos pensées et que vous n'avez pas besoin d'un caractère générique de fin pour correspondre.
Voici donc où un texte d'aide à l'écran (toujours visible) est nécessaire.
Last Name _________ (Use % to match zero or more characters, _ to match one character)
(Sm%th matches Smth, Smyth, Smith but not Smythe)