2016-03-08 5 views
0

je peux faireTeradata SQL: Interroger une colonne pour le modèle qui a des espaces (aka une clause where à la recherche d'un modèle qui a des espaces, dans une chaîne)

where Col like '%Mystring%String2%' 

Dans Teradata SQL ou je peux utiliser le ? pour les correspondances de caractères uniques. Comment puis-je rechercher motif de contenu qui est comme cela en utilisant Terdata SQL Regex
String<one of more instance of spaces or non alpha chars>string2 par exemple. OU
IS NOT NULL Il existe 1 ou plusieurs instances d'espaces ou d'autres caractères non alpha compris entre 2 chaînes ou plus E.g. considérer cette chaîne qui fait partie d'une sqltext dans une base de données PDCR

sel t1.c1, t2.c2, t3.c3 from 
t1 , t2 ,t3 
where t2.Cx is NULL and t3.cy IS NOT NULL and 
t3.Ca is   NULL   AND 
t3.cb is NULL AND   t3.c7 is  NOT NULL 
and t3.c10 not like any ('%searchstring%','%string%','%||||%') 

Notez le amt variable des espaces entre NOT et NULL et IS et NULL

Je voulais former where des clauses qui avaient vérifier pour diverses conditions non alpha comme (c'est plus pseudo-code comme.) Désolé pour ce)

where Sqltext like '%NOT<1 or more instances of Spaces only>NULL%' 
    or SQLtext like '%,\%<one or more instances of | character%' escape '\' 

C'était ce que je cherchais. REGEXP_SIMILAR semble prometteur. Essayer de voir comment il peut être longue avec une where clause

+0

Quelques exemples de données et le résultat souhaité vous aideront beaucoup à comprendre votre question. \t S'il vous plaît lire [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t Et voici un bon endroit pour [** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) pour apprendre comment améliorer la qualité de vos questions et obtenir de meilleures réponses. –

+2

Définir * non alpha chars *, probablement quelque chose comme 'REGEXP_SIMILAR (col, '. *? Chaîne [^ a-z] + chaîne2. *?', 'I')' – dnoeth

+0

Merci. J'ai déjà donné des exemples. Je ne cherche pas ici l'entrée et je veux ce type de réponse. – user1874594

Répondre

2

Utilisez un regex \s pour rechercher des espaces (espace, tabulation, CRLF):

WHERE REGEXP_SIMILAR(col,'.*?IS[\s|\|]+NOT.*?','i') = 1 

.*?     -- any characters 
    IS     -- 1st string 
    [\s|\|]+   -- one or more whitespaces and/or | 
      NOT  -- 2nd string 
       .*?' -- any characters 

Ou REGEXP_INSTR, ce qui est un peu plus court que vous n Vous n'avez pas besoin des «caractères quelconques» au début et à la fin:

WHERE REGEXP_INSTR(x,'IS[\s|\|]+NOT',1,1,0,'i') > 0 
+0

Fabuleux Dieter !!! – user1874594