Ergebnis 1 bis 4 von 4

Thema: Anführungszeichen aus String entfernen

  1. #1
    Chuqa ist offline Benutzer
    Registriert seit
    25.01.2006
    Beiträge
    39

    Standard Anführungszeichen aus String entfernen

    Hi,

    ich baue in meiner plpgsql-Funktion einen String aus einer SQL-Abfrage:
    Code:
    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:
    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:
    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

  2. #2
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Chuqa Beitrag anzeigen
    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:
    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

  3. #3
    fristo ist offline Super-Moderator
    Registriert seit
    08.12.2005
    Ort
    Raum Frankfurt/Main
    Beiträge
    668

    Standard

    Hallo chuqa,

    Zitat Zitat von Chuqa Beitrag anzeigen
    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

  4. #4
    Chuqa ist offline Benutzer
    Registriert seit
    25.01.2006
    Beiträge
    39

    Standard

    OK, es funktioniert jetzt.

    Ich danke euch beiden

    gruß

Ähnliche Themen

  1. Problem Aus einem String den ersten Eintrag entfernen
    Von tme2525 im Forum PL/pgSQL
    Antworten: 9
    Letzter Beitrag: 02.08.2010, 19:32
  2. PostgreSQL 8.3 vollständig entfernen?
    Von CenText im Forum Konfiguration
    Antworten: 6
    Letzter Beitrag: 19.04.2008, 23:41
  3. PHP: pgquery mit spaltenname in Anführungszeichen
    Von benwen im Forum Programmierung
    Antworten: 2
    Letzter Beitrag: 09.05.2007, 08:09
  4. Istallation unter Windows - Data Verzeichnis beim Entfernen mit entfernen
    Von nylen im Forum Installation von PostgreSQL
    Antworten: 3
    Letzter Beitrag: 28.11.2006, 11:35
  5. Anführungszeichen im String
    Von beho im Forum SQL
    Antworten: 3
    Letzter Beitrag: 14.11.2006, 15:32

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum