![]() |
Datenbank: Oracle • Version: 10 • Zugriff über: PL/SQL
Nummern ermitteln die eine Teilnummer enthalten
Hallo,
ich möchte folgende Abfrage realisieren: In der einen Tabelle stehen Telefonnummern incl. Vorwahl in einer anderen Tabelle nur Vorwahlen. Ich möchte nun in der der Vorwahl-Tabelle bestimmte Einträge mit einem Flag versehen und alle Rufnummern aus der Telefonnummern-Tabelle bekommen, die mit dieser geflagten Vorwahl beginnen. Mit dem IN-Operator habe ich es nicht hinbekommen like funktioniert nur mit einem Datensatz:
SQL-Code:
Was nicht wirklich ausführbar ist. Durch das Subselect bekomme ich einen String zurück, den ich mit einem Like vergleichen könnte. Nur wie genau? Hat jemand einen Plan für mich?
SELECT * FROM TELEFONNUMMERN
WHERE TELEFONNUMMER LIKE SELECT Concat(PREFIX,'%') FROM PREFIX_TABLE |
Re: Nummern ermitteln die eine Teilnummer enthalten
SQL-Code:
sollte funktionieren
SELECT * FROM TELEFONNUMMERN
WHERE TELEFONNUMMER LIKE (SELECT Concat(PREFIX,'%') FROM PREFIX_TABLE); |
Re: Nummern ermitteln die eine Teilnummer enthalten
Hallo,
wie sehen Deine Telefonnummern aus? Alle in einem einheitlichen Format? z. B.: 089/12345679 oder 08912345678 oder +498912345678 oder?
SQL-Code:
dürfte nicht funktionieren, da das innere Select mehr als einen Datensatz liefert und damit ein Vergleich auf < = > != like ... scheitert.
SELECT * FROM TELEFONNUMMERN
WHERE TELEFONNUMMER LIKE (SELECT Concat(PREFIX,'%') FROM PREFIX_TABLE); |
Re: Nummern ermitteln die eine Teilnummer enthalten
Hallo,
davon ausgehend, dass in Telefonnummer die Vorwahl immer durch / vom Rest getrennt ist, könnte sowas in der Art funktionieren.
SQL-Code:
oder auch so:
select * from (
select left(TELEFONNUMMER ,instr(TELEFONNUMMER,'/',1)) as Vorwahl from TELEFONNUMMERN ) x, PREFIX_TABLE a where x.Vorwahl = a.PREFIX and a.flag = 'gesetzt'
SQL-Code:
eventuell ginge es aber auch so, wobei hier keine (sichtbare) Trennung zwischen Vorwahl und übriger Rufnummer vorhanden sein muss:
select * from TELEFONNUMMERN, PREFIX_TABLE
where instr(TELEFONNUMMERN.TELEFONNUMMER,'/',1) = PREFIX_TABLE.PREFIX and PREFIX_TABLE.flag = 'gesetzt'
SQL-Code:
(nur hingeschrieben, nicht getestet)
select * from TELEFONNUMMERN, PREFIX_TABLE
where left(TELEFONNUMMERN.TELEFONNUMMER,lenght(PREFIX_TABLE.PREFIX)) = PREFIX_TABLE.PREFIX and PREFIX_TABLE.flag = 'gesetzt' |
Re: Nummern ermitteln die eine Teilnummer enthalten
Moin,
meine Telefonnummern liegen ohne Trennzeichen vor. Daher ist Dein letzter Vorschlag der richtige Wink. Ich habe das noch ein wenig abgeändert:
SQL-Code:
Mit dem Statement werden so alle Einträge aus der Telefonnummern-Tabelle exportiert, die in der Prefix-Tabelle den aktuellen TAg als Exporttag haben.
SELECT *
FROM TELEFONNUMMERN m, PREFIX p WHERE LPAD(m.startnumber,LENGTH(p.PREFIX),0) = p.PREFIX AND p.exportday = (SELECT TO_CHAR(SYSDATE,'D')FROM DUAL); Vielen Dank für eure Hilfe! |
Re: Nummern ermitteln die eine Teilnummer enthalten
Allgemein sollte das so gehen:
SQL-Code:
So kann im Gegensatz zu LPAD, denke ich, auch ein Index verwendet werden.
select *
From Nummern n join Prefixe p on n.Telefonnummer like p.prefix+'%' |
Re: Nummern ermitteln die eine Teilnummer enthalten
Hallo,
da ich im Moment Probleme bei der Laufzeit des ersten vorgeschlagenen Statements habe, würde ich den Join gern versuchen:
SQL-Code:
Allerdings muss ich die Bedingung
select *
From Nummern n join Prefixe p on n.Telefonnummer like p.prefix+'%'
SQL-Code:
für den Tag noch mit aufnehmen. Aber schon das erste Statement oben bringt den Fehler:
AND p.exportday = (SELECT TO_CHAR(SYSDATE,'D')FROM DUAL);
Delphi-Quellcode:
ORA-01722: Ungültige Zahl
|
Re: Nummern ermitteln die eine Teilnummer enthalten
Hi,
muss lauten:
SQL-Code:
SELECT p.prefix as Vorwahl,m.*
FROM TELEFONNUMMERN m, PREFIX p WHERE m.startnumber like p.prefix || '%' |
Re: Nummern ermitteln die eine Teilnummer enthalten
Ah, '+' ist MSSQL ,'||' offensichtlich Oracle.
Ich würde Dir empfehlen, mit JOIN zu arbeiten und nicht mit deinem Konstrukt. Das ist fast das Gleiche aber Du wirst bei mehreren Tabellen u.u. Probleme bekommen. |
Re: Nummern ermitteln die eine Teilnummer enthalten
Hallo alzaimar,
ich habe Deinen Vorschlag beherzigt und die Oracle-Join-Syntax benutzt. Funktioniert und ist auch relativ schnell. Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz