Anführungszeichen aus String entfernen

Probleme und Fragen zum Thema Trigger und Funktionen.

Anführungszeichen aus String entfernen

Beitragvon Chuqa » Mo 26. Feb 2007, 09:46

Hi,

ich baue in meiner plpgsql-Funktion einen String aus einer SQL-Abfrage:
Code: Alles auswählen
FOR mpvrec IN SELECT DISTINCT pv_id FROM historytodataset_coll
                                WHERE is_collection = TRUE
                                AND table_id = mtablerec.table_id
                                AND col_name = mcolsrec.col_name LOOP
    pvs_sql := pvs_sql || ''pv_id = '' || mpvrec.pv_id || '' OR '';
END LOOP;
pvs_sql := rtrim (pvs_sql, ''OR '');
        pvs_sql := pvs_sql || '')'';
Nun habe ich z.B. sowas wie "(pv_id=5 OR pv_id=12 OR pv_id 38)" dort stehen. Ich benötige jetzt diesen Teilstring in mehreren weiteren Abfragen. Wenn ich allerdings den String in die Abfrage einfüge:
Code: Alles auswählen
sql := ''SELECT count(*) FROM history
                WHERE '' || pvs_sql ||
                '' AND "time" >='' || quote_literal(start_interval) || ... ;
, dann wird dieser String in Anführungszeichen geschrieben und die SQL-Abfrage sieht dann ungefähr so aus:
Code: Alles auswählen
SELECT count(*) FROM history
                WHERE "(pv_id=5 OR pv_id=12 OR pv_id 38)" AND "time" >='2007-01-01' ...
Ich muss also irgendwie die Anführungszeichen aus meinen generierten String bekommen. Kann mir jemand sagen, wie ich das machen kann?

gruß chuqa
Chuqa
Benutzer
 
Beiträge: 39
Registriert: Mi 25. Jan 2006, 09:26

Beitragvon akretschmer » Mo 26. Feb 2007, 11:00

Chuqa hat geschrieben:Hi,

Ich muss also irgendwie die Anführungszeichen aus meinen generierten String bekommen. Kann mir jemand sagen, wie ich das machen kann?

gruß chuqa


Mir ist grad nicht klar, wo die reinkommen. Vielleicht hilft Dir aber folgendes weiter:

Code: Alles auswählen
test=*# select * from foo;
 id | a | b
----+---+---
  1 | 1 | 1
  2 | 1 | 2
  3 | 2 | 2
  4 | 2 | 3
  5 | 2 | 2
(5 rows)

create or replace function ff() returns text as $$
declare
        r       record;
        t       text;
        t2      text;
begin
        select into t2 array_to_string(ARRAY(select id from foo), ', ');
        t2 := '(' || t2 || ')';
        t := '(';
        for r in select id from foo loop
                t := t || 'id=' || r.id || ' or ';
        end loop;
        t := regexp_replace(t, ' or $', '');
        t := t || ')';
        return t || ' oder besser ' || t2;
end;
$$ language plpgsql;

test=*# select * from ff();
                                 ff
--------------------------------------------------------------------
 (id=1 or id=2 or id=3 or id=4 or id=5) oder besser (1, 2, 3, 4, 5)
(1 row)





Die Art, wie ich t2 bastle, sieht vielleicht a bissl eleganter aus, und du kannst das in Deinen selects nachfolgend als ... in (..) einbauen. Das wird dann zwar eh wieder zu einem OR erweitert, aber imho sieht es erst mal aufgeräumter aus.

Warum verwendest Du kein Dollar-Quoting? Vielleicht hängt Dein Problem damit zusammen, daß Du es nicht nimmst, und da was flasch gequotet ist. Bin grad zu faul, das näher zu untersuchen...


Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5938
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon fristo » Mo 26. Feb 2007, 14:51

Hallo chuqa,

Chuqa hat geschrieben:Ich muss also irgendwie die Anführungszeichen aus meinen generierten String bekommen. Kann mir jemand sagen, wie ich das machen kann?


Doku, Kapitel 9.4. "String Functions and Operators"

Funktion: translate(string text, from text, to text)

Beispiel: translate('12"34"5"678"90"', '"', '') ==> 1234567890




mfg

fristo
fristo
Erfahrener Benutzer
 
Beiträge: 670
Registriert: Do 8. Dez 2005, 13:30
Wohnort: Raum Frankfurt/Main

Beitragvon Chuqa » Mo 26. Feb 2007, 15:35

OK, es funktioniert jetzt.

Ich danke euch beiden :D

gruß
Chuqa
Benutzer
 
Beiträge: 39
Registriert: Mi 25. Jan 2006, 09:26


Zurück zu Trigger und Funktionen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste