Oracle SQL de Recherche de ou trouver des caractères par sa valeur ascii
Mon défi est de trouver certains caractères provenant de plusieurs tables.
À mon travail à la base de données est mis en place pour conserver toutes les valeurs de date dans les colonnes nommé comme ceci d_date, d_inserteby_id, d_valid_to etc.
Mais le trait de soulignement est réservé char dans SQL droite, donc un simple like '%D_%' habitude de travailler.
Donc quand je suis à la recherche pour les lignes contenant une référence à une date que je dois être un peu plus créatifs '%D_%'
Je sais que je peux:
select * from table t where Upper(T.column) like '%D_%' escape '\'
Mais comment la recherche pour que le d et le trait de soulignement à l'aide de sa valeur ascii?
- Exactement ce que vous voulez atteindre? ? Voulez-vous simplement à obtenir une liste de toutes les colonnes de base de données dont les noms commencent par D_ ? Ou voulez-vous prendre cette liste pour rechercher une donnée (date) de la valeur dans tous ces colonnes?
- Oui, à la recherche de lignes pas nécessaire au début avec une D_ mais où que ce soit dans la ligne dans une colonne d'une table donnée.
- Honnêtement, si aucune réponse jusqu'à présent faire ce que vous voulez, vous devez fournir certaines sensible des données de test.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas rechercher un nom de colonne dans la table que c'est une partie de, vous avez à regarder le dictionnaire de données et l'utilisation de SQL dynamique si votre schéma de change fréquemment.
Vous pouvez ...
Il n'y a aucun avantage à utiliser la valeur ASCII de D dans la recherche -- il serait juste de camoufler le code. COMME et ÉVASION est la bonne approche.
À l'aide de majuscules et les noms d'objet est considéré comme une mauvaise pratique dans Oracle, par la manière.
Edit: bien sûr, si vous avez vraiment envie de rechercher des chaînes par leurs caractères ASCII, alors vous feriez quelque chose comme:
ou
ou
Comme toujours, beaucoup de façons de faire les choses de la mauvaise façon.
Je ne suis toujours pas sûr de savoir pourquoi vous souhaitez utiliser la valeur ASCII au lieu de la traduction littérale de soulignement, mais c'est peut-être ce que vous voulez (95 est le code ASCII de '_'):
Veuillez noter que ceci va déclencher une erreur si vous essayez de remplacer le 95 avec, par exemple, de 65 ans (pour un 'A'), puisque vous ne pouvez pas échapper les caractères normaux.
Pour gérer cela, vous auriez besoin d'une sorte de logique de la distinction entre le normal caractères et les caractères que vous avez à s'échapper.
@Shogoot: Si je vous comprends bien, vous voulez être en mesure de rechercher à travers toutes les tables qui ont une LIGNE de la colonne qui a une VALEUR de votre chaîne de recherche.
Si ce qui précède est correct, je pense que votre seule solution est d'utiliser un bloc PL/SQL, comme illustré ici:
Vous aurez à changer la chaîne de recherche pour ce que vous avez besoin. La requête ci-dessus est basée sur Oracle OE schéma, et vous aurez à ajuster le "cur" de la requête en fonction de vos besoins.
Aussi, gardez à l'esprit que vous pouvez rechercher par le biais d'un grand nombre de données, afin de l'utiliser en fonction de votre propre confort.
Espère que cette aide.
~ TJ