2017-02-10 6 views
1

Guten Tag Leute! Ich versuche es trotzdem, aber ich kann nicht scheinen, einen Tab am Ende eines Varchar in Firebird zu bekommen. Weiß jemand wie es geht?Tabellierung von Firebird entfernen

Vielen Dank im Voraus.

Bearbeitung präziser bleiben:

Bsp .:

Select guia, convenio, nome, trim (matricula) from table where guia = '142' 

Group by guia, convenio, nome, trim (matricula) 

das Ergebnis

142 | 1 | Name of patient | 111222 
142 | 1 | Name of patient | 111222 

Allerdings, wenn ich entfernen Sie das Anmeldefeld, das ein varchar (40), die ist mit den Tabs:

Select guia, convenio, nome, matricula from table where guia = '142' 

Group by guia, convenio, nome 

Das Ergebnis ist:

142 | 1 | nome do paciente 

Und als ich entdeckte, dass das Problem Einschreibung war:

Mit Hilfe dieser Funktion: CHAR_LENGTH (matricula)

Select guia, convenio, nome, matricula, Char_Length (matricula) from table where guia = '142' 

Group by guia, convenio, nome, matricula 

Das Ergebnis:

142 | 1 | nome do paciente | 111222 | 6 
142 | 1 | nome do paciente | 111222 | 10 
+0

Warum machen Sie eine GROUP BY, wenn Sie keine Aggregatfunktionen haben (z. B. MAX, SUM, COUNT)? Auch die allgemeine GROUP BY-Regel besagt: Wenn eine GROUP BY-Klausel angegeben ist, muss jede Spaltenreferenz in der SELECT-Liste entweder eine Gruppierungsspalte identifizieren oder das Argument einer SET-Funktion sein! – jarlh

+0

Es ist mir nicht ganz klar, was das Problem ist. Können Sie weitere Informationen hinzufügen? Weil Sie sagen _ "Ich kann nicht scheinen, um eine Registerkarte am Ende eines Varchar zu bekommen" _, aber der Rest Ihrer Beschreibung scheint das Gegenteil anzuzeigen (das heißt: Sie möchten das Tab-Zeichen entfernen). Beachten Sie, dass die wirkliche Lösung darin besteht, zu verhindern, dass diese Zeichen überhaupt in die Datenbank gelangen. –

+0

Das ist genau das, was ich meinem Chef gesagt habe ... aber er will es so gemacht ... Ich muss die Feld-Registerkarte neu aufzeichnen, damit die Gruppe die gleiche Registrierung sieht und eine Zeile ist. Aber mit der Registerkarte unterscheidet sich die Zeichengröße von einer Zeile zur anderen .... – sounobre

Antwort

0

Wenn Sie die Registerkarten am Ende eines Wertes entfernen möchten, haben Sie mehrere Möglichkeiten:

  • Verwenden TRIM mit einer expliziten Zeichenfolge

    trim(trailing ascii_char(9) from theColumn) 
    

    9 ist die Tab-Zeichen. Bei dieser Lösung wird davon ausgegangen, dass am Ende keine Kombination aus Leerzeichen und Tabulatoren vorhanden ist.

  • den Mangel der bisherigen Lösung zu adressieren, verwenden REPLACE Registerkarte mit einem Leerzeichen zu ersetzen und dann trimmen:

    trim(trailing from replace(theColumn, ascii_char(9), ' ')) 
    

jedoch die beste Lösung, Ihre Daten werden würde, indem sie es das Update auf sanieren, und ändern Sie Ihre Anwendung so, dass diese nachlaufenden Tabulatoren (und Leerzeichen) nicht in der Datenbank landen. Alternativ können Sie einen Trigger hinzufügen, der dies für Sie erledigt.