tag:forum.selfhtml.org,2005:/self Telefonnummern in Adressdatenbank – SELFHTML-Forum 2021-05-21T19:11:19Z https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788528?srt=yes#m1788528 Otto Normalverbraucher 2021-05-19T12:32:51Z 2021-05-19T12:32:51Z Telefonnummern in Adressdatenbank <p>Hallo,</p> <p>ich habe eine Adressdatenbank in der Telefonnummern in allen möglichen und unmöglichen Formaten gespeichert sind.</p> <p>Ich suche jetzt mit LIKE und "%15735499117%". Leider gibt es aber auch Telefonnummern mit "-" und Leerzeichen irgendwo mittendrin. Wie finde ich auch die?</p> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788531?srt=yes#m1788531 Rolf B 2021-05-19T12:49:11Z 2021-05-19T12:49:11Z Telefonnummern in Adressdatenbank <p>Hallo Otto,</p> <p>ich würde Dir empfehlen, eine Zusatzspalte hinzuzufügen, in der alles außer den Ziffern entfernt ist.</p> <p>Das ist natürlich nicht so trivial. Wenn Du Nummern wie +49301234567 zusammen mit (030)1234567 hast, musst Du genauer analysieren, ob die Sonderzeichen besondere Bedeutungen mitbringen. Und Du musst dann für Dich entscheiden, ob Du alle inländischen Nummern im internationalen Format speichern willst, oder ob Du ausländische Nummern nicht benötigst (ich plädiere für ersteres).</p> <p>Ob das eine computed column sein kann, wie die Formel aussieht, ob Du die Spalte persistent definieren musst oder ob sie virtuell bleiben kann, und wie Du einen Index drauflegst damit sich die Sache auch lohnt, das hängt vom verwendeten Datenbankserver ab.</p> <p>Wenn es keine computed column sein kann, solltest Du einen Trigger hinzufügen, der bei INSERT und UPDATE Operationen das Nummernsuchfeld für die betroffene Row neu aufbaut.</p> <p>Welches DBMS verwendest Du?</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788537?srt=yes#m1788537 dedlfix 2021-05-19T13:52:44Z 2021-05-19T13:52:44Z Telefonnummern in Adressdatenbank <p>Tach!</p> <blockquote> <p>ich habe eine Adressdatenbank in der Telefonnummern in allen möglichen und unmöglichen Formaten gespeichert sind. Wie finde ich auch die?</p> </blockquote> <p>Eine einigermaßen schlechte Idee ist, einen RegExp-Ausdruck zu erstellen, der zwischen den Ziffern Sonderzeichen erlaubt, und damit zu suchen. Aber dann muss jeder Datensatz einzeln geprüft werden, was einen Full Table Scan erfordert. Besser ist die von Rolf B bereits propagierte Vorgehensweise mit einer extra Spalte für die Suche. Das ist auch eine übliche Vorgehensweise, wenn von Daten die originale Schreibweise erhalten bleiben soll, sich aber für die Suche eine andere Schreibweise besser eignet.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788622?srt=yes#m1788622 Raketenheinz 2021-05-21T12:45:39Z 2021-05-21T12:45:39Z Telefonnnummern normalisieren - Lösung mit Funktion für Update, Insert, Select <p>Ich habe <a href="https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788607#m1788607" rel="noopener noreferrer">die bereits vorgestellte Lösung für MySQL >=8 und MariaDB >= 10.0.5</a> so vervollständigt, dass eine Funktion erstellt wird, welche sodann für Updates, Inserts und Where-Klauseln benutzt werden kann:</p> <pre><code class="block language-sql"><span class="token keyword">USE</span> <span class="token identifier"><span class="token punctuation">`</span>test<span class="token punctuation">`</span></span><span class="token punctuation">;</span> <span class="token keyword">DROP</span> <span class="token keyword">TABLE</span> <span class="token keyword">IF</span> <span class="token keyword">EXISTS</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span><span class="token punctuation">;</span> <span class="token keyword">CREATE</span> <span class="token keyword">table</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span><span class="token punctuation">(</span> <span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span> <span class="token keyword">TEXT</span><span class="token punctuation">(</span><span class="token number">30</span><span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token identifier"><span class="token punctuation">`</span>t_n<span class="token punctuation">`</span></span> <span class="token keyword">TEXT</span><span class="token punctuation">(</span><span class="token number">30</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'099 123456789'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'099 1234567 89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'0049 99 1234567-89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'+49 99 1234567-89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'++49 99 1234567-89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'0049 (0)99 1234567-89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'+49 (0)99 1234567-89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'++49 (0)99 1234567-89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">DROP</span> <span class="token keyword">FUNCTION</span> <span class="token keyword">IF</span> <span class="token keyword">EXISTS</span> t_clear<span class="token punctuation">;</span> <span class="token keyword">DELIMITER</span> $$ <span class="token keyword">CREATE</span> <span class="token keyword">FUNCTION</span> t_clear <span class="token punctuation">(</span>s <span class="token keyword">TEXT</span><span class="token punctuation">(</span><span class="token number">30</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token keyword">RETURNS</span> <span class="token keyword">text</span><span class="token punctuation">(</span><span class="token number">30</span><span class="token punctuation">)</span> <span class="token keyword">BEGIN</span> <span class="token keyword">SET</span> s <span class="token operator">=</span> CONCAT <span class="token punctuation">(</span> <span class="token string">'00'</span><span class="token punctuation">,</span> REGEXP_REPLACE <span class="token punctuation">(</span> REGEXP_REPLACE <span class="token punctuation">(</span> <span class="token keyword">REPLACE</span> <span class="token punctuation">(</span> REGEXP_REPLACE<span class="token punctuation">(</span> s<span class="token punctuation">,</span> <span class="token string">'^\\+\\+|^00'</span><span class="token punctuation">,</span> <span class="token string">'+'</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'(0)'</span><span class="token punctuation">,</span> <span class="token string">''</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'^0'</span><span class="token punctuation">,</span> <span class="token string">'49'</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'[^0-9]'</span><span class="token punctuation">,</span> <span class="token string">''</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">RETURN</span> s<span class="token punctuation">;</span> <span class="token keyword">END</span>$$ <span class="token keyword">DELIMITER</span> <span class="token punctuation">;</span> <span class="token keyword">UPDATE</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token keyword">SET</span> <span class="token identifier"><span class="token punctuation">`</span>t_n<span class="token punctuation">`</span></span> <span class="token operator">=</span> t_clear<span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span> <span class="token string">'0561 123456789'</span><span class="token punctuation">,</span> t_clear<span class="token punctuation">(</span><span class="token string">'0561 123456789'</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">SELECT</span> <span class="token string">'- ALLE: -----------------------------------------------'</span> <span class="token keyword">as</span> <span class="token string">''</span><span class="token punctuation">;</span> <span class="token keyword">SELECT</span> <span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">,</span> <span class="token identifier"><span class="token punctuation">`</span>t_n<span class="token punctuation">`</span></span> <span class="token keyword">FROM</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span><span class="token punctuation">;</span> <span class="token keyword">SELECT</span> <span class="token string">'- Mit 049561 beginnend: -------------------------------'</span> <span class="token keyword">as</span> <span class="token string">''</span><span class="token punctuation">;</span> <span class="token keyword">SELECT</span> <span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">,</span> <span class="token identifier"><span class="token punctuation">`</span>t_n<span class="token punctuation">`</span></span> <span class="token keyword">FROM</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token keyword">WHERE</span> <span class="token identifier"><span class="token punctuation">`</span>t_n<span class="token punctuation">`</span></span> <span class="token operator">LIKE</span> <span class="token string">'0049561%'</span><span class="token punctuation">;</span> <span class="token keyword">SELECT</span> <span class="token string">'- Mit 0561 beginnend: ----------------------------------'</span> <span class="token keyword">as</span> <span class="token string">''</span><span class="token punctuation">;</span> <span class="token keyword">SELECT</span> <span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">,</span> <span class="token identifier"><span class="token punctuation">`</span>t_n<span class="token punctuation">`</span></span> <span class="token keyword">FROM</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token keyword">WHERE</span> <span class="token identifier"><span class="token punctuation">`</span>t_n<span class="token punctuation">`</span></span> <span class="token operator">LIKE</span> CONCAT<span class="token punctuation">(</span> t_clear<span class="token punctuation">(</span><span class="token string">'0561'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'%'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">SELECT</span> <span class="token string">'-------------------------------------------------------'</span> <span class="token keyword">as</span> <span class="token string">''</span><span class="token punctuation">;</span> </code></pre> <p>Tabelle und Funktion müssen natürlich nur einmal erstellt und das Update nur einmal durchgeführt werden. Bereits existierende Abfragen müssen dann natürlich auch angepasst werden…</p> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788534?srt=yes#m1788534 Gunnar Bittersmann selfhtml@bittersmann.de https://bittersmann.de 2021-05-19T13:06:27Z 2021-05-19T13:06:27Z Telefonnummern in Adressdatenbank <p>@@Rolf B</p> <blockquote> <p>ich würde Dir empfehlen, eine Zusatzspalte hinzuzufügen, in der alles außer den Ziffern entfernt ist.</p> </blockquote> <p>Warum Zusatzspalte? In der Datenbank sollten die Telefonnummern nur in der normalisierten Form stehen.</p> <p> LLAP</p> <div class="signature">-- <br> <em lang="en">“When I was 5 years old, my mother always told me that happiness was the key to life. When I went to school, they asked me what I wanted to be when I grew up. I wrote down ‘happy.’ They told me I didn’t understand the assignment, and I told them they didn’t understand life.”</em> —John Lennon </div> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788535?srt=yes#m1788535 Otto normalverbraucher 2021-05-19T13:20:14Z 2021-05-19T13:20:14Z Telefonnummern in Adressdatenbank <p>Alle +, 49, () usw. habe ich schon aus dem Suchwort rausgefiltert. Mit % am Anfang und Ende werden nun alle gefunden bis auf die mit dem "-" und Leerzeichen irgendwo in der Nummer.</p> <p>Ich verwende mysql.</p> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788536?srt=yes#m1788536 dedlfix 2021-05-19T13:45:55Z 2021-05-19T13:45:55Z Telefonnummern in Adressdatenbank <p>Tach!</p> <blockquote> <blockquote> <p>ich würde Dir empfehlen, eine Zusatzspalte hinzuzufügen, in der alles außer den Ziffern entfernt ist.</p> </blockquote> <p>Warum Zusatzspalte? In der Datenbank sollten die Telefonnummern nur in der normalisierten Form stehen.</p> </blockquote> <p>Nein, nicht unbedingt, denn dann geht Information verloren, die du nicht durch simples Formatieren wiederhergestellt bekommst. Bei Firmen ist es üblich, die Durchwahlnummer von der Einwahlnummer mit Bindestrich abzutrennen. Wenn du den Bindestrich entfernst, kannst du ihn nicht wieder einfügen, wenn du nicht weißt, an welcher Stelle die Trennung zwischen beiden Nummernteilen ist. Auch können Leerzeichen zur besseren Erkennbarkeit der Teile eingefügt sein. Die könnte man zwar nach Regeln wieder einfügen, aber das ist nicht trivial. Dazu muss man die Besonderheiten der Länder kennen, besonders Ortsvorwahllängen und Sondernummern-Regelungen</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788538?srt=yes#m1788538 Rolf B 2021-05-19T14:35:35Z 2021-05-19T14:53:23Z Telefonnummern in Adressdatenbank <p>Hallo Otto,</p> <blockquote> <p>Alle +, 49, () usw. habe ich schon aus dem Suchwort rausgefiltert</p> </blockquote> <p>Aus dem Suchwort? Also dem Input für die Suche? Ja, da musst Du natürlich auch filtern.</p> <p>Du musst die Sonderzeichen aus dem Suchbegriff entfernen, aber aus den Telefonnummern in der DB auch! Deswegen habe ich Dir eine generierte Spalte vorgeschlagen, die eine normalisierte Version der Telefonnummer enthält.</p> <blockquote> <p>Ich suche jetzt mit LIKE und "%15735499117%"</p> </blockquote> <p>Fail - das würde auch die 0015735499117 (+1-573-549-9117) finden. Das ist eine <a href="https://www.allareacodes.com/573" rel="nofollow noopener noreferrer">Windstream-Nummer</a> für ein Mobiltelefon in <a href="https://goo.gl/maps/VBbxWY2enKMXr5R57" rel="nofollow noopener noreferrer">Middletown, Montgomery County, Missouri</a> (ehemals Prairie Township). Nomen est Omen - das ist tiefstes Redneck Land. <a href="https://en.wikipedia.org/wiki/Middletown,_Missouri" rel="nofollow noopener noreferrer">167 Einwohner, 1/3 unter der Armutsschwelle</a> und 3 Kirchen </p> <p>Deswegen fragte ich nach dem Bedarf für eine Normalisierung auf nationaler oder internationaler Ebene. Aber normalisieren musst Du!</p> <p>Wenn normalisiert ist, suchst Du einfach mit = statt mit LIKE.</p> <p>Zum Normalisieren kann man eine Replace-Kette verwenden:</p> <pre><code class="block language-sql"><span class="token keyword">REPLACE</span><span class="token punctuation">(</span><span class="token keyword">REPLACE</span><span class="token punctuation">(</span><span class="token keyword">REPLACE</span><span class="token punctuation">(</span><span class="token keyword">REPLACE</span><span class="token punctuation">(</span>nummer<span class="token punctuation">,</span> <span class="token string">' '</span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'-'</span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'('</span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">')'</span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">)</span> </code></pre> <p>das entfernt Space, Minus und Klammern. Ich habe die zugehörigen Parameter untereinandergestellt, damit man nicht den Überblick verliert.</p> <p>Das Problem, ob Du eine nationale Nummer (015735499117) oder eine internationale Nummer (0015735499117 oder +15735499117) hast, wird dadurch nicht behoben und es ist auch nicht so einfach behebbar. Man kann das mit einem CASE-Ausdruck angehen, aber das ist kompliziert.</p> <pre><code class="block language-sql"><span class="token keyword">CASE</span> <span class="token keyword">WHEN</span> SUBSTR<span class="token punctuation">(</span>nummer<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token string">'00'</span> <span class="token keyword">THEN</span> nummer <span class="token keyword">WHEN</span> SUBSTR<span class="token punctuation">(</span>nummer<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token string">'+'</span> <span class="token keyword">THEN</span> CONCAT<span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> SUBSTR<span class="token punctuation">(</span>nummer<span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">WHEN</span> SUBSTR<span class="token punctuation">(</span>nummer<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token string">'0'</span> <span class="token keyword">THEN</span> CONCAT<span class="token punctuation">(</span><span class="token string">'0049'</span><span class="token punctuation">,</span> SUBSTR<span class="token punctuation">(</span>nummer<span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">ELSE</span> <span class="token string">'???'</span> <span class="token keyword">END</span> </code></pre> <p>Diese Case-Operation würde 00-Nummern unverändert lassen, aus +49... eine 0049-Nummer machen und nationale Nummern (0157354...) zu 0049157354 internationalisieren.</p> <p>Und um DAS musst Du dann noch die REPLACE-Kette legen. Ziemlich umfänglich.</p> <p>Besser ist es, für sowas eine Function als <a href="https://dev.mysql.com/doc/refman/5.7/en/stored-routines.html" rel="nofollow noopener noreferrer">Stored Routine</a> zu schreiben, das macht die Sache deutlich übersichtlicher.</p> <p>In MYSQL ist beim Erzeugen eines generierten Suchfeldes noch zu beachten, dass nur InnoDB eine virtuell generierte Spalte indexieren kann. MyISAM kann nur auf stored generated columns einen Index legen. <a href="https://dev.mysql.com/doc/refman/5.7/en/create-table.html" rel="nofollow noopener noreferrer">Guckst Du hier, Stichwort GENERATED</a>.</p> <p>Was Du keinesfalls tun darfst, ist eine Normalisierung in dem SELECT, der die Suche durchführt. Das führt dazu, dass kein Index genutzt werden kann und MySQL einen Tablescan machen muss. Tablescans sind der Tod jeder DB-Performance. Mit dem indexierten Suchfeld gelingt ein Index-Seek.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788539?srt=yes#m1788539 Gunnar Bittersmann selfhtml@bittersmann.de https://bittersmann.de 2021-05-19T14:48:24Z 2021-05-19T14:48:24Z Telefonnummern in Adressdatenbank <p>@@dedlfix</p> <blockquote> <blockquote> <blockquote> <p>ich würde Dir empfehlen, eine Zusatzspalte hinzuzufügen, in der alles außer den Ziffern entfernt ist.</p> </blockquote> <p>Warum Zusatzspalte? In der Datenbank sollten die Telefonnummern nur in der normalisierten Form stehen.</p> </blockquote> <p>Nein, nicht unbedingt, denn dann geht Information verloren, die du nicht durch simples Formatieren wiederhergestellt bekommst.</p> </blockquote> <p>Ja. So wie ich das Zitat aus dem vorigen Posting stehenlassen hatte, ist auch nicht, wie ich „normalisieren“ meinte.</p> <p>Ich hatte im Sinn (aber nicht in den Fingern): nicht alles außer den Ziffern entfernen, sondern die Telefonnummer in die Form <code>+49 89 3216-8</code> (oder <code>+49-89-3216-8</code>) bringen.</p> <p><code>+49 89 3216-0</code> ist Rosis Faxnummer? </p> <blockquote> <p>Die könnte man zwar nach Regeln wieder einfügen, aber das ist nicht trivial. Dazu muss man die Besonderheiten der Länder kennen, besonders Ortsvorwahllängen und Sondernummern-Regelungen</p> </blockquote> <p>Ja. Aber mein iPhone kann das.</p> <p>Hat dann auch den Vorteil, dass man alle Telefonnummern gleich (und richtig!) formatiert ausgibt; egal in welcher Schreibweise ein $Nutzer seine Nummer angegeben hat.</p> <p> LLAP</p> <div class="signature">-- <br> <em lang="en">“When I was 5 years old, my mother always told me that happiness was the key to life. When I went to school, they asked me what I wanted to be when I grew up. I wrote down ‘happy.’ They told me I didn’t understand the assignment, and I told them they didn’t understand life.”</em> —John Lennon </div> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788610?srt=yes#m1788610 Raketenheinz 2021-05-21T10:51:35Z 2021-05-21T10:51:35Z Jepp! <blockquote> <p>Nein, nicht unbedingt, denn dann geht Information verloren, die du nicht durch simples Formatieren wiederhergestellt bekommst.</p> </blockquote> <p>Das halte ich zumindest so lange für korrekt, wie die Herkunft der Daten und damit deren Eingabe-Format unbestimmt ist. Der Mehraufwand für das Speichern der (von wem auch immer manuell) getippten Nummer steht dann den Vorteil gegenüber, dass man diese auch manuell korrigieren kann.</p> <p><strong>Grund:</strong></p> <p>Niemand kann vorhersehen, was die Eintipper sich so ausdenken… Also kann das auch nicht mit irgendwelchen Garantien maschinell umgeformt werden. Menschliche Intelligenz ist, in der Gesamtbreite der Anwendungsmöglichkeiten betrachtet, der KI immer noch überlegen.</p> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788542?srt=yes#m1788542 Der Martin 2021-05-19T15:42:42Z 2021-05-19T15:42:42Z Telefonnummern in Adressdatenbank <p>Hallo Rolf,</p> <blockquote> <p>Das Problem, ob Du eine nationale Nummer (015735499117) oder eine internationale Nummer (0015735499117 oder +15735499117) hast, wird dadurch nicht behoben und es ist auch nicht so einfach behebbar. Man kann das mit einem CASE-Ausdruck angehen, aber das ist kompliziert.</p> <pre><code class="block language-sql"><span class="token keyword">CASE</span> <span class="token keyword">WHEN</span> SUBSTR<span class="token punctuation">(</span>nummer<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token string">'00'</span> <span class="token keyword">THEN</span> nummer <span class="token keyword">WHEN</span> SUBSTR<span class="token punctuation">(</span>nummer<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token string">'+'</span> <span class="token keyword">THEN</span> CONCAT<span class="token punctuation">(</span><span class="token string">'00'</span><span class="token punctuation">,</span> SUBSTR<span class="token punctuation">(</span>nummer<span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">WHEN</span> SUBSTR<span class="token punctuation">(</span>nummer<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token string">'0'</span> <span class="token keyword">THEN</span> CONCAT<span class="token punctuation">(</span><span class="token string">'0049'</span><span class="token punctuation">,</span> SUBSTR<span class="token punctuation">(</span>nummer<span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">ELSE</span> <span class="token string">'???'</span> <span class="token keyword">END</span> </code></pre> </blockquote> <p>so normalisierst du auf zwei führende Nullen und setzt außerdem voraus, dass eine Nummer, die mit nur einer Null beginnt, eine Nummer in Deutschland ist. Beides nicht gut.</p> <p>Das Präfix für eine internationale Rufnummer ist in vielen Ländern, aber nicht überall die Doppel-Null. In den USA ist es meines Wissens die 010, in Österreich 09. Deswegen gilt nach internationalem Standard (irgendein ISO) das Pluszeichen als Ersatzzeichen für das im jeweiligen Land übliche Präfix.</p> <p>Und im Code die 49 als Default-Ländervorwahl hartcodieren ist auch nicht schön. Wer weiß, ob derselbe Code nicht auch mal in Polen oder in Luxemburg laufen soll. Also besser als Config-Parameter.</p> <blockquote> <p>Diese Case-Operation würde 00-Nummern unverändert lassen, aus +49... eine 0049-Nummer machen und nationale Nummern (0157354...) zu 0049157354 internationalisieren.</p> </blockquote> <p>Eben. Und das ist nur richtig, solange diese Abfrage in DE stattfindet.</p> <p>Live long and <s>pros</s> healthy,<br>  Martin</p> <div class="signature">-- <br> Hunde, die bellen, beißen nicht.<br> Jedenfalls nicht gleichzeitig. </div> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788607?srt=yes#m1788607 Raketenheinz 2021-05-21T10:35:51Z 2021-05-21T10:35:51Z Telefonnummern in Adressdatenbank <p>Ich habe da zufällig was “fertiges” - das kannst Du an Deine Bedürfnisse anpassen.</p> <p>An den Inserts erkennst Du (grob), welche Telefonnummern es verarbeitet.</p> <ul> <li>Die Tabelle wird angelegt und mit den Testdaten gefüttert.</li> </ul> <p>Dann werden:</p> <ol> <li>Die Spalte <code>t</code> gelesen und in dem String</li> <li>führende <code>++</code> und <code>00</code> zu <code>+</code> - sodann</li> <li>die Angabe <code>(0)</code> entfernt - sodann</li> <li>führende Nullen durch <code>49</code> ersetzt</li> <li>alles, was keine Ziffer ist entfernt</li> <li><code>00</code> davor notiert.</li> <li>Der neue String wird in der Spalte t_n eingefügt.</li> </ol> <p>Zuletzt wird die Tabelle ausgegeben.</p> <pre><code class="block language-sql"><span class="token keyword">USE</span> <span class="token identifier"><span class="token punctuation">`</span>test<span class="token punctuation">`</span></span><span class="token punctuation">;</span> <span class="token keyword">DROP</span> <span class="token keyword">TABLE</span> <span class="token keyword">IF</span> <span class="token keyword">EXISTS</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span><span class="token punctuation">;</span> <span class="token keyword">CREATE</span> <span class="token keyword">table</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span><span class="token punctuation">(</span> <span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span> <span class="token keyword">TEXT</span><span class="token punctuation">(</span><span class="token number">30</span><span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token identifier"><span class="token punctuation">`</span>t_n<span class="token punctuation">`</span></span> <span class="token keyword">TEXT</span><span class="token punctuation">(</span><span class="token number">30</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'099 123456789'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'099 1234567 89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'0049 99 1234567-89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'+49 99 1234567-89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'++49 99 1234567-89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'0049 (0)99 1234567-89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'+49 (0)99 1234567-89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token punctuation">(</span><span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span><span class="token punctuation">(</span><span class="token string">'++49 (0)99 1234567-89'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">UPDATE</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span> <span class="token keyword">SET</span> <span class="token identifier"><span class="token punctuation">`</span>t_n<span class="token punctuation">`</span></span> <span class="token operator">=</span> CONCAT <span class="token punctuation">(</span> <span class="token string">'00'</span><span class="token punctuation">,</span> REGEXP_REPLACE <span class="token punctuation">(</span> REGEXP_REPLACE <span class="token punctuation">(</span> <span class="token keyword">REPLACE</span> <span class="token punctuation">(</span> REGEXP_REPLACE<span class="token punctuation">(</span> t<span class="token punctuation">,</span> <span class="token string">'^\\+\\+|^00'</span><span class="token punctuation">,</span> <span class="token string">'+'</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'(0)'</span><span class="token punctuation">,</span> <span class="token string">''</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'^0'</span><span class="token punctuation">,</span> <span class="token string">'+49'</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'[^0-9]'</span><span class="token punctuation">,</span> <span class="token string">''</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">SELECT</span> <span class="token identifier"><span class="token punctuation">`</span>t<span class="token punctuation">`</span></span><span class="token punctuation">,</span> <span class="token identifier"><span class="token punctuation">`</span>t_n<span class="token punctuation">`</span></span> <span class="token keyword">FROM</span> <span class="token identifier"><span class="token punctuation">`</span>ptest<span class="token punctuation">`</span></span><span class="token punctuation">;</span> </code></pre> <p>Weitere <strong>Anpassungen an Deine Bedürfnisse</strong> sind <strong>wahrscheinlich notwendig</strong>, aber eigentlich "nur noch Arbeit". So sollte z.B. ein Index für die Suche geschaffen werden.</p> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788541?srt=yes#m1788541 dedlfix 2021-05-19T15:22:39Z 2021-05-19T15:22:39Z Telefonnummern in Adressdatenbank <p>Tach!</p> <blockquote> <p>Ich hatte im Sinn (aber nicht in den Fingern): nicht alles außer den Ziffern entfernen, sondern die Telefonnummer in die Form <code>+49 89 3216-8</code> (oder <code>+49-89-3216-8</code>) bringen.</p> </blockquote> <p>Dabei bleibt das Problem mit der Suche aber bestehen.</p> <blockquote> <blockquote> <p>Die könnte man zwar nach Regeln wieder einfügen, aber das ist nicht trivial. Dazu muss man die Besonderheiten der Länder kennen, besonders Ortsvorwahllängen und Sondernummern-Regelungen</p> </blockquote> <p>Ja. Aber mein iPhone kann das.</p> </blockquote> <p>Weil es dazu eine Library nutzt, in der all die Regeln versammelt sind. Meines Wissens müsste es eine frei verfügbare von Google geben, vielleicht auch andere. Damit kann man aber nur öffentlich bekannte Kriterien anwenden, wie die Ortsvorwahlen, und allgemeine Regeln (nach x Ziffern ein Leerzeichen einfügen). Die Trennung zwischen Einwahl und Durchwahl geht dabei aber verloren.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788543?srt=yes#m1788543 MudGuard http://www.andreas-waechter.de/ 2021-05-19T16:19:23Z 2021-05-19T16:19:23Z Telefonnummern in Adressdatenbank <p>Hi,</p> <blockquote> <p>Das Präfix für eine internationale Rufnummer ist in vielen Ländern, aber nicht überall die Doppel-Null. In den USA ist es meines Wissens die 010, in Österreich 09.</p> </blockquote> <p>Bist Du sicher (bzgl. Österreich)? Ich meine, es ist auch dort die 00.</p> <p>(Was nichts daran ändert, daß man für die Normalisierung doch eher das + verwenden sollte, da es ja Länder gibt, für die die Auslandsvorwahl nicht die Doppelnull ist)</p> <p>cu,<br> Andreas a/k/a MudGuard</p> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788547?srt=yes#m1788547 Rolf B 2021-05-19T17:58:12Z 2021-05-19T18:03:51Z Telefonnummern in Adressdatenbank <p>Hallo Martin,</p> <p>da die Frage von Otto Normalverbraucher kommt und nicht von Franz Normalkonsument oder Urs Normalkäufer, habe ich auf den deutschen Teil vom DACH getippt.</p> <blockquote> <p>so normalisierst du auf zwei führende Nullen und setzt außerdem voraus, dass eine Nummer, die mit nur einer Null beginnt, eine Nummer in Deutschland ist. Beides nicht gut.</p> </blockquote> <p>Für einen in Deutschland befindlichen Anwender ist es perfekt. Wer nicht in Deutschland sitzt, braucht andere Regeln, ja. Wer in Deutschland in einem Unternehmen sitzt, braucht noch andere Regeln (im Büro normalisiere ich für unser Callcenter auf 00049).</p> <p>Alles weitere schätze ich für den OP als irrelevant ein. Wenn das ein Irrtum ist, kann er sich melden und wir diskutieren weiter drüber. Ich hab's eh schon komplex genug gemacht, das muss erstmal verstanden werden.</p> <p><a href="https://de.wikipedia.org/wiki/Internationale_Telefonvorwahl" rel="nofollow noopener noreferrer">Wikipedia sagt übrigens</a>, die USA hätten 011 als Internationale Verkehrsausscheidungsziffer.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788544?srt=yes#m1788544 Der Martin 2021-05-19T16:42:25Z 2021-05-19T16:42:25Z Telefonnummern in Adressdatenbank <p>Hallo,</p> <blockquote> <blockquote> <p>Das Präfix für eine internationale Rufnummer ist in vielen Ländern, aber nicht überall die Doppel-Null. In den USA ist es meines Wissens die 010, in Österreich 09.</p> </blockquote> <p>Bist Du sicher (bzgl. Österreich)? Ich meine, es ist auch dort die 00.</p> </blockquote> <p>zumindest war das 1986 so, als unser Jahrgang im Ski-Schullandheim in Obertauern war. Da musste ich in der Telefonzelle im Ort die 0949 vorwählen, um nach Hause anzurufen.</p> <p>Live long and <s>pros</s> healthy,<br>  Martin</p> <div class="signature">-- <br> Hunde, die bellen, beißen nicht.<br> Jedenfalls nicht gleichzeitig. </div> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788545?srt=yes#m1788545 klawischnigg 2021-05-19T16:56:37Z 2021-05-19T16:56:37Z Telefonnummern in Adressdatenbank <p>Hi there,</p> <blockquote></blockquote> <blockquote> <p>zumindest war das 1986 so, als unser Jahrgang im Ski-Schullandheim in Obertauern war. Da musste ich in der Telefonzelle im Ort die 0949 vorwählen, um nach Hause anzurufen.</p> </blockquote> <p>Bist Du Dir da sicher? Von '09' hab ich noch nie etwas gehört. Ausserdem dürfte es da Probleme mit dem Routing geben. Mit '09' fangen in Österreich die Mehrwertnummern an. Was Du evt. verwechselst - früher begannen Kurzvorwahlen in Österreich mit '9'. '92' bspw. war die Kurzvorwahl für Wien (statt 0222), '993' für Graz (statt 0316) etc - kann sein, daß man damals mit '9' (ohne Null) + Ländervorwahl ins Ausland gekommen ist. Ich hör' davon anyway zum ersten Mal.</p> <p>Abgesehen davon ist das ohnehin ein eher akademischer Disput, weil in Österreich im Gegensatz zu Deutschland praktisch niemand mehr einen Festnetzanschluss hat (größere Firmen und Ämter vielleicht ausgenommen) und somit ohnehin immer +49 etc. vorgewählt wird... </p> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788546?srt=yes#m1788546 Der Martin 2021-05-19T17:17:23Z 2021-05-19T17:17:23Z Telefonnummern in Adressdatenbank <p>Hallo,</p> <blockquote> <blockquote> <p>zumindest war das 1986 so, als unser Jahrgang im Ski-Schullandheim in Obertauern war. Da musste ich in der Telefonzelle im Ort die 0949 vorwählen, um nach Hause anzurufen.</p> </blockquote> <p>Bist Du Dir da sicher? Von '09' hab ich noch nie etwas gehört. Ausserdem dürfte es da Probleme mit dem Routing geben. Mit '09' fangen in Österreich die Mehrwertnummern an.</p> </blockquote> <p>war das in den 80ern auch schon so? Gab's die damals schon?</p> <blockquote> <p>Was Du evt. verwechselst - früher begannen Kurzvorwahlen in Österreich mit '9'. '92' bspw. war die Kurzvorwahl für Wien (statt 0222), '993' für Graz (statt 0316) etc - kann sein, daß man damals mit '9' (ohne Null) + Ländervorwahl ins Ausland gekommen ist.</p> </blockquote> <p>Das wäre schwierig, weil ja dann z.B. die 92 für Wien mit 9216 für Tunesien kollidieren würde, und die 993 für Graz mit der 993 für Afghanistan. Immerhin wurde zu der Zeit noch mechanisch-analog und Ziffer für Ziffer vermittelt.</p> <p>Ich weiß jedenfalls, dass das mit der 09 als erste Ziffern auf der Anleitung an der Innenwand der Telefonzelle stand (Obertauern ist ja immerhin Touristen-Hochburg, außer vielleicht in den letzten 12 Monaten). Kann es sein, dass für Münzfernsprecher abweichende Regeln galten?</p> <blockquote> <p>Abgesehen davon ist das ohnehin ein eher akademischer Disput, weil in Österreich im Gegensatz zu Deutschland praktisch niemand mehr einen Festnetzanschluss hat (größere Firmen und Ämter vielleicht ausgenommen) und somit ohnehin immer +49 etc. vorgewählt wird... </p> </blockquote> <p>Mag sein. Aber jetzt interessiert es mich schon noch, was mir mein Langzeitgedächtnis da sagen will.</p> <p>Live long and <s>pros</s> healthy,<br>  Martin</p> <div class="signature">-- <br> Hunde, die bellen, beißen nicht.<br> Jedenfalls nicht gleichzeitig. </div> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788548?srt=yes#m1788548 klawischnigg 2021-05-19T18:33:14Z 2021-05-19T18:33:14Z Telefonnummern in Adressdatenbank <p>Hi there,</p> <blockquote> <blockquote> <p>Bist Du Dir da sicher? Von '09' hab ich noch nie etwas gehört. Ausserdem dürfte es da Probleme mit dem Routing geben. Mit '09' fangen in Österreich die Mehrwertnummern an.</p> </blockquote> <p>war das in den 80ern auch schon so? Gab's die damals schon?</p> </blockquote> <p>Keine Ahnung, eher nicht, aber siehe unten... </p> <blockquote> <blockquote> <p>Was Du evt. verwechselst - früher begannen Kurzvorwahlen in Österreich mit '9'. '92' bspw. war die Kurzvorwahl für Wien (statt 0222), '993' für Graz (statt 0316) etc - kann sein, daß man damals mit '9' (ohne Null) + Ländervorwahl ins Ausland gekommen ist.</p> </blockquote> <p>Das wäre schwierig, weil ja dann z.B. die 92 für Wien mit 9216 für Tunesien kollidieren würde, und die 993 für Graz mit der 993 für Afghanistan. Immerhin wurde zu der Zeit noch mechanisch-analog und Ziffer für Ziffer vermittelt.</p> </blockquote> <p>Nein, 92 war die ganze Vorwahl, ohne führende Null, während Tunesion 09216 ist…</p> <blockquote> <p>Ich weiß jedenfalls, dass das mit der 09 als erste Ziffern auf der Anleitung an der Innenwand der Telefonzelle stand (Obertauern ist ja immerhin Touristen-Hochburg, außer vielleicht in den letzten 12 Monaten). Kann es sein, dass für Münzfernsprecher abweichende Regeln galten?</p> </blockquote> <p>Generell nicht, aber ich will nicht ausschliessen, daß die Trachtenpärchen irgendwie eigene Vorwahlregeln hatten, auch wenn's mir unwahrscheinlich erscheint. Eher, daß 9 die eigentliche Vorwahl war und Du mit Null eine Amtsleitung holen mußtest. In Tourismusgebieten will ich Münzfernsprecher in Privatbesitz nicht ausschliessen, da wäre eine "interne" Vorwahl möglich.</p> <p>Allerdings hab ich von einer Länderkurzwahl nichts gefunden (ich hab jetzt einmal <a href="https://de.wikipedia.org/wiki/Kurzwahl#%C3%96sterreich" rel="nofollow noopener noreferrer">da</a> nachgeschaut, deswegen kommt mir meine Theorie jetzt irgendwie nicht mehr glaubhaft vor)</p> <blockquote> <p>Mag sein. Aber jetzt interessiert es mich schon noch, was mir mein Langzeitgedächtnis da sagen will.</p> </blockquote> <p>Vermutlich, daß Du im Schulschiurlaub in der Telefonzelle eine Sexhotline angerufen hast, das hast Du dann verdrängt und einen Anruf bei Mutti draus gemacht... </p> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788608?srt=yes#m1788608 Raketenheinz 2021-05-21T10:40:26Z 2021-05-21T10:40:26Z (Nachtrag) <blockquote> <p>Ich habe da zufällig was “fertiges” - das kannst Du an Deine Bedürfnisse anpassen.</p> </blockquote> <p>Ach so. Das ist mit MariaDB 10.5.10 getestet. Leider ist es so, dass sich die Syntax von REGEXP_REPLACE zwischen aktuellen und älteren Versionen von MySQL/MariaDB unterscheidet.</p> <p><strong>Du hast aber nichts dazu angegeben.</strong></p> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788611?srt=yes#m1788611 Rolf B 2021-05-21T10:52:18Z 2021-05-21T10:52:18Z Telefonnummern in Adressdatenbank <p>Hallo Raketenheinz,</p> <p>An REGEX_REPLACE hatte ich auch gedacht. Ich weiß aber nicht, welches die gängigen Versionen von MySQL/MariaDB sind und diese Funktion ist erst in MySQL 8. Bei MariaDB weiß ich es nicht.</p> <p>In anderen DBMS müsste man erstmal gucken was da angeboten wird.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788612?srt=yes#m1788612 Raketenheinz 2021-05-21T11:09:31Z 2021-05-21T11:09:31Z Telefonnummern in Adressdatenbank <p>Ich habe das für MariaDB mal nachgeschaut und folgendes gefunden:</p> <blockquote> <p><em>REGEXP_REPLACE was introduced in MariaDB 10.0.5.</em></p> </blockquote> <p><a href="https://mariadb.com/kb/en/regexp_replace/" rel="nofollow noopener noreferrer">https://mariadb.com/kb/en/regexp_replace/</a></p> <blockquote> <p><em>MariaDB 10.0.5 Release Notes</em></p> </blockquote> <blockquote> <p><em>Status: <strong>Beta</strong> | Release <strong>Date: 7 Nov 2013</strong></em></p> </blockquote> <p><a href="https://mariadb.com/kb/en/mariadb-1005-release-notes/" rel="nofollow noopener noreferrer">https://mariadb.com/kb/en/mariadb-1005-release-notes/</a></p> <p>In der nächsten Stable war es dann drin.</p> https://forum.selfhtml.org/self/2021/may/19/telefonnummern-in-adressdatenbank/1788637?srt=yes#m1788637 Raketenheinz 2021-05-21T19:11:19Z 2021-05-21T19:11:19Z Telefonnnummern normalisieren - Lösung mit Funktion für Update, Insert, Select <p>Oh je. Das SQL-Skript hatte ich gefunden, als ich eigentlich <a href="https://www.fastix.org/test/ftx_format_german_test.php?t=%2B49+%280%29+561+31722-77" rel="nofollow noopener noreferrer">das hier</a> suchte. Google war soeben so freundlich, meinem Gedächtnis nachzuhelfen…</p>