2010-03-29 4 views
0

changer la question ici ... Je reçois une erreur lorsque je tente ceci:postgres - regex_replace dans une clause distincte? Ok ...

SELECT COUNT (DISTINCT mid, regexp_replace(na_fname, '\\s*', '', 'g'), regexp_replace(na_lname, '\\s*', '', 'g')) 
FROM masterfile; 

Est-il possible d'utiliser regexp dans une clause distincte comme celui-ci?

L'erreur est la suivante:

WARNING: nonstandard use of \\ in a string literal 
LINE 1: ...CT COUNT (DISTINCT mid, regexp_replace(na_fname, '\\s*', ''... 
+0

C'est un avertissement, pas une erreur. Pour indiquer qu'un littéral de chaîne utilise \ pour échapper des caractères spéciaux, utilisez un 'E' avant le littéral de chaîne. –

+0

Mon mauvais ... Vous penseriez que l'AVERTISSEMENT m'aurait ébranlé ... – n00b0101

Répondre

1
select trim(regexp_replace(E'\tfoo \t bar baz ', E'\\s+', ' ', 'g')) 

remplace tous (en raison du drapeau 'g') séquences des espaces (\s) (+) avec un seul espace, puis trims il, retour:

"foo bar baz" 

Le E doit indiquer que le codage d'échappement \ est utilisé.

Avec votre nouvelle question éditée, vous êtes probablement pour une requête le long des lignes de:

select count(*) from (
    select distinct 
     mid, 
     regexp_replace(na_fname, E'\\s*', '', 'g'), 
     regexp_replace(na_lname, E'\\s*', '', 'g') 
    from masterfile) as subquery; 
+0

Merci pour cela ... J'ai bien compris cette partie ... J'essaie de faire un compte distinct (j'ai édité mon original question). Des suggestions sur la façon de faire cela? J'ai essayé de le faire comme un compte select (*) où mid in (sélectionnez count (distinct ...), mais je reçois "subquery a trop de colonnes" ... – n00b0101

+0

Merci encore, je suis un peu hors de mon profondeur avec pg, donc j'apprécie les conseils – n00b0101

Questions connexes