AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Nummern ermitteln die eine Teilnummer enthalten

Nummern ermitteln die eine Teilnummer enthalten

Ein Thema von barnti · begonnen am 5. Nov 2008 · letzter Beitrag vom 6. Nov 2008
Antwort Antwort
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

Nummern ermitteln die eine Teilnummer enthalten

  Alt 5. Nov 2008, 16:08
Datenbank: Oracle • Version: 10 • Zugriff über: PL/SQL
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:
SELECT * FROM TELEFONNUMMERN
WHERE TELEFONNUMMER LIKE
SELECT Concat(PREFIX,'%') FROM PREFIX_TABLE
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?
Gruß,

Barnti
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.859 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Nummern ermitteln die eine Teilnummer enthalten

  Alt 5. Nov 2008, 16:33
SQL-Code:
SELECT * FROM TELEFONNUMMERN
WHERE TELEFONNUMMER LIKE
(SELECT Concat(PREFIX,'%') FROM PREFIX_TABLE);
sollte funktionieren
Markus Kinzler
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

Re: Nummern ermitteln die eine Teilnummer enthalten

  Alt 5. Nov 2008, 16:42
Hallo,

wie sehen Deine Telefonnummern aus?
Alle in einem einheitlichen Format?

z. B.: 089/12345679 oder 08912345678 oder +498912345678 oder?

SQL-Code:
SELECT * FROM TELEFONNUMMERN
WHERE TELEFONNUMMER LIKE
(SELECT Concat(PREFIX,'%') FROM PREFIX_TABLE);
dürfte nicht funktionieren, da das innere Select mehr als einen Datensatz liefert und damit ein Vergleich auf < = > != like ... scheitert.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

Re: Nummern ermitteln die eine Teilnummer enthalten

  Alt 5. Nov 2008, 17:33
Hallo,
davon ausgehend, dass in Telefonnummer die Vorwahl immer durch / vom Rest getrennt ist, könnte sowas in der Art funktionieren.
SQL-Code:
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'
oder auch so:
SQL-Code:
select * from TELEFONNUMMERN, PREFIX_TABLE
where instr(TELEFONNUMMERN.TELEFONNUMMER,'/',1) = PREFIX_TABLE.PREFIX
and PREFIX_TABLE.flag = 'gesetzt'
eventuell ginge es aber auch so, wobei hier keine (sichtbare) Trennung zwischen Vorwahl und übriger Rufnummer vorhanden sein muss:
SQL-Code:
select * from TELEFONNUMMERN, PREFIX_TABLE
where left(TELEFONNUMMERN.TELEFONNUMMER,lenght(PREFIX_TABLE.PREFIX)) = PREFIX_TABLE.PREFIX
and PREFIX_TABLE.flag = 'gesetzt'
(nur hingeschrieben, nicht getestet)
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Nummern ermitteln die eine Teilnummer enthalten

  Alt 6. Nov 2008, 10:29
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:
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);
Mit dem Statement werden so alle Einträge aus der Telefonnummern-Tabelle exportiert, die in der Prefix-Tabelle den aktuellen TAg als Exporttag haben.

Vielen Dank für eure Hilfe!
Gruß,

Barnti
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Nummern ermitteln die eine Teilnummer enthalten

  Alt 6. Nov 2008, 10:57
Allgemein sollte das so gehen:
SQL-Code:
select *
  From Nummern n
    join Prefixe p
      on n.Telefonnummer like p.prefix+'%'
So kann im Gegensatz zu LPAD, denke ich, auch ein Index verwendet werden.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Nummern ermitteln die eine Teilnummer enthalten

  Alt 6. Nov 2008, 11:51
Hallo,

da ich im Moment Probleme bei der Laufzeit des ersten vorgeschlagenen Statements habe, würde ich den Join gern versuchen:

SQL-Code:
select *
  From Nummern n
    join Prefixe p
      on n.Telefonnummer like p.prefix+'%'
Allerdings muss ich die Bedingung

 AND p.exportday = (SELECT TO_CHAR(SYSDATE,'D')FROM DUAL); für den Tag noch mit aufnehmen. Aber schon das erste Statement oben bringt den Fehler:

ORA-01722: Ungültige Zahl
Gruß,

Barnti
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Nummern ermitteln die eine Teilnummer enthalten

  Alt 6. Nov 2008, 11:55
Hi,

muss lauten:

SQL-Code:
SELECT p.prefix as Vorwahl,m.*
FROM TELEFONNUMMERN m, PREFIX p
WHERE m.startnumber like p.prefix || '%'
Gruß,

Barnti
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Nummern ermitteln die eine Teilnummer enthalten

  Alt 6. Nov 2008, 11:56
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Nummern ermitteln die eine Teilnummer enthalten

  Alt 6. Nov 2008, 12:23
Hallo alzaimar,

ich habe Deinen Vorschlag beherzigt und die Oracle-Join-Syntax benutzt. Funktioniert und ist auch relativ schnell.

Danke!
Gruß,

Barnti
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz