Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

Sinan

Senior Schreiberling

  • "Sinan" is male
  • "Sinan" started this thread

Posts: 1,021

Date of registration: Jul 5th 2003

Location: Malaga

Occupation: Senior Cloud Solution Engineer bei Oracle

1

Friday, December 1st 2006, 4:24pm

SQL - Allgemeine Fragen

Hallo zusammen,

Wie überprüft man mit sql ob der Text in einer Spalte einen Zeilenumbruch enthält?
Konkreter:
Ich habe eine Spalte xyz vom Typ varchar (oarcle) in einer Tabelle, nun möchte ich alle Texte zurückgeben die einen Zeilenumbruch enthalten!
Ich habe festgestellt, dass der Text folgendermaßen in der DB gespeicht ist
"text und viel mehr text \n hier kommt die zweite Zeile"

aber die Abfrage
select xyz from table where xyz like '%\n%' geht leider nicht.

Hat jemand eine Idee?
With great power comes great responsibility

migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

2

Friday, December 1st 2006, 4:41pm

RE: SQL - Allgemeine Fragen

Versuch's doch mal mit INSTR().

Also: SELECT ... FROM ... WHERE INSTR(col,'\n')<>0;

EDIT: Falls INSTR() keine Zeilenumbrüche erkennt, müsste REGEXP_INSTR() das können.
tar: Anlegen eines leeren Archivs wird feige verweigert.

This post has been edited 3 times, last edit by "migu" (Dec 1st 2006, 4:44pm)


Sinan

Senior Schreiberling

  • "Sinan" is male
  • "Sinan" started this thread

Posts: 1,021

Date of registration: Jul 5th 2003

Location: Malaga

Occupation: Senior Cloud Solution Engineer bei Oracle

3

Friday, December 1st 2006, 4:59pm

RE: SQL - Allgemeine Fragen

Danke für die Antwort Migu :)
also instr() bringt nichts, regexp_instr gibt mir alles zurück :rolleyes:
jedenfalls, wenn ich die Abfrage über JDBC starte, also
String query = "select col from table where col like '%\n%'"
OracleCallableStatement stmt = (OracleCallableStatement)conn.prepareCall(query);
OracleResultSet rs = (OracleResultSet)stmt.executeQuery();
while(rs.next())
usw.
dann geht das, hura!
With great power comes great responsibility

migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

4

Friday, December 1st 2006, 5:51pm

Was hast du denn vorher anders gemacht? Die neue Anfrage sieht genauso aus wie die erste dort oben.
tar: Anlegen eines leeren Archivs wird feige verweigert.

ctk

Trainee

  • "ctk" is male

Posts: 113

Date of registration: Oct 15th 2004

5

Friday, December 1st 2006, 10:24pm

Quoted

Original von migu
Was hast du denn vorher anders gemacht? Die neue Anfrage sieht genauso aus wie die erste dort oben.

AFAIK macht der Java-Preprozessor aus jedem \n einen "echten" Zeilenumbruch
Technik ist der Wettlauf der Intelligenz mit der Kreativität der Narren.
Bis heute haben die Narren immer gewonnen.

migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

6

Saturday, December 2nd 2006, 9:10am

Quoted

Original von ctk

Quoted

Original von migu
Was hast du denn vorher anders gemacht? Die neue Anfrage sieht genauso aus wie die erste dort oben.

AFAIK macht der Java-Preprozessor aus jedem \n einen "echten" Zeilenumbruch
Ich denke nicht. Die Umwandlung dürfte println vornehmen, falls du das meinst. Dazu finde ich in der Java Language Specification auf die Schnelle nichts.

Das erklärte aber auch nicht, warum Sinans jetzige Variante im Gegensatz zu der alten funktioniert, oder? Die Anfrage ist ja praktisch die gleiche.
(Man könnte natürlich auch "%\\n%" schreiben. So bekäme Oracle ein "\n".)
tar: Anlegen eines leeren Archivs wird feige verweigert.

This post has been edited 2 times, last edit by "migu" (Dec 2nd 2006, 9:30am)


ctk

Trainee

  • "ctk" is male

Posts: 113

Date of registration: Oct 15th 2004

7

Saturday, December 2nd 2006, 6:00pm

Quoted

Original von migu

Quoted

Original von ctk

Quoted

Original von migu
Was hast du denn vorher anders gemacht? Die neue Anfrage sieht genauso aus wie die erste dort oben.

AFAIK macht der Java-Preprozessor aus jedem \n einen "echten" Zeilenumbruch
Ich denke nicht. Die Umwandlung dürfte println vornehmen, falls du das meinst. Dazu finde ich in der Java Language Specification auf die Schnelle nichts.

Das erklärte aber auch nicht, warum Sinans jetzige Variante im Gegensatz zu der alten funktioniert, oder? Die Anfrage ist ja praktisch die gleiche.
(Man könnte natürlich auch "%\\n%" schreiben. So bekäme Oracle ein "\n".)

http://java.sun.com/docs/books/jls/secon…doc.html#101089
Man beachte den Hinweis auf den Fehler zur Compilezeit, bei falschen sequenzen dieser art. Ergo enthält der String nicht "\n" sondern das reele newline Zeichen.

Falls man die Abfrage NICHT in Java stellt (was Sinan wohl zunächst versucht hat), wird dagenen wahrscheinlich der String "\n" an die Datenbank gesendet, die dieses nicht als newline interpretiert (warum auch immer).
Technik ist der Wettlauf der Intelligenz mit der Kreativität der Narren.
Bis heute haben die Narren immer gewonnen.

This post has been edited 1 times, last edit by "ctk" (Dec 2nd 2006, 6:18pm)


migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

8

Saturday, December 2nd 2006, 11:56pm

@ctk: Danke für die Recherche. So hab ich wieder was dazugelernt. :)
tar: Anlegen eines leeren Archivs wird feige verweigert.

Sinan

Senior Schreiberling

  • "Sinan" is male
  • "Sinan" started this thread

Posts: 1,021

Date of registration: Jul 5th 2003

Location: Malaga

Occupation: Senior Cloud Solution Engineer bei Oracle

9

Monday, December 4th 2006, 9:04am

morgen,
am Anfang hatte ich die Abfrage in Hora (Oracle Tool) gestellt. Da wurde die \n als String interpretiert.
Dananch hab ich die gleiche Abfrage mit Java über JDBS gestellt und es hat funktioniert.
With great power comes great responsibility