🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
9 messages
9 total messages Started by HomeAutomation Freak Sun, 21 Sep 2003 12:18
SQL vraag
#4026
Author: HomeAutomation Freak
Date: Sun, 21 Sep 2003 12:18
36 lines
2073 bytes
hoi groep,


ik heb een MS SQL DB, met daarin in velden, telefoonnummers (als
varchar)
deze telefoonnummers zitten er "geformateerd" in,
dwz. 031234567 zit erin als +32(0)3-1234567,
maar kan er evengoed als 03/123.45.67. of andere varianten inzitten.

de bedoeling is nu om een select te doen, die "alleen nummers"
teruggeeft.

ik heb al voor bepaalde tekens een replace ingebouwd in m'n select,
maar dit wordt nogal onoverzichtelijk om alle niet-numerische tekens
eruit te filteren op die manier.

Is er een alternatief ???

momenteel heb ik dit:
SELECT
	TelNr,
	Name
FROM
	Addresses
WHERE
	replace(replace(replace(TelNr,'/',''),'-',''),'.','') =
'031234567'


Iemand enige suggestie ?
de bedoeling is om via een modem met callerid functionaliteit,
de nummer te laten opzoeken in een database dus.


Thanks,
Kris
Re: SQL vraag
#4027
Author: Erik Hensema
Date: Sun, 21 Sep 2003 12:30
25 lines
2087 bytes
HomeAutomation Freak (HomeAutomation.invalid@pandora.be) wrote:
> ik heb een MS SQL DB, met daarin in velden, telefoonnummers (als
> varchar)
> deze telefoonnummers zitten er "geformateerd" in,
> dwz. 031234567 zit erin als +32(0)3-1234567,
> maar kan er evengoed als 03/123.45.67. of andere varianten inzitten.
> 
> de bedoeling is nu om een select te doen, die "alleen nummers"
> teruggeeft.
> 
> ik heb al voor bepaalde tekens een replace ingebouwd in m'n select,
> maar dit wordt nogal onoverzichtelijk om alle niet-numerische tekens
> eruit te filteren op die manier.
> 
> Is er een alternatief ???

Een stored procedure misschien?

SELECT AlleenNummer(TelNr), Name FROM Addresses;

CREATE FUNCTION AlleenNummer AS [... enz, ik ken MS SQL niet]

-- 
Erik Hensema (erik@hensema.net)                             ICQ# 8280101
Reality is for those who can't face Science Fiction.
Re: SQL vraag
#4028
Author: Ewoud Dronkert
Date: Sun, 21 Sep 2003 13:23
10 lines
1624 bytes
On Sun, 21 Sep 2003 12:18:28 GMT, HomeAutomation Freak wrote:
> dwz. 031234567 zit erin als +32(0)3-1234567,
> maar kan er evengoed als 03/123.45.67. of andere varianten inzitten.
> de bedoeling is nu om een select te doen, die "alleen nummers"
> teruggeeft.

In plaats van veel tijd investeren in een mooie, slimme of snelle
oplossing (altijd leuk), zou je misschien ook een extra kolom kunnen
toevoegen 'telnr_kaal' en 1x de conversie uitvoeren. Werkt allicht
niet als er de hele tijd veranderingen in 'telnr' gemaakt worden.
Re: SQL vraag
#4029
Author: HomeAutomation Freak
Date: Sun, 21 Sep 2003 13:41
29 lines
2161 bytes
>
>In plaats van veel tijd investeren in een mooie, slimme of snelle
>oplossing (altijd leuk), zou je misschien ook een extra kolom kunnen
>toevoegen 'telnr_kaal' en 1x de conversie uitvoeren. Werkt allicht
>niet als er de hele tijd veranderingen in 'telnr' gemaakt worden.

Hmm, het is een tabel met een paar honderdduizend records,
zo wordt m'n database ineens weer wat MB's meer h� ;-)

soit, heb het opgelost met nested replace functions:

dus:
SELECT
	Name,
	Tel
FROM
	Addresses
WHERE

replace(replace(replace(replace(replace(replace(Tel,'-',''),'/',''),'
',''),'.'),'(',''),')','')

is nog redelijk doenbaar, en is ook correct, aangezien in het
programma zelf, bij de invoer van nummers, alleen maar numerische
waardes, en verder een spatie en volgende karakters geldig zijn -./()


greetz,
Kris
Re: SQL vraag
#4030
Author: JeroenV
Date: Sun, 21 Sep 2003 14:44
16 lines
1948 bytes
HomeAutomation Freak wrote:

>>In plaats van veel tijd investeren in een mooie, slimme of snelle
>>oplossing (altijd leuk), zou je misschien ook een extra kolom kunnen
>>toevoegen 'telnr_kaal' en 1x de conversie uitvoeren. Werkt allicht
>>niet als er de hele tijd veranderingen in 'telnr' gemaakt worden.
> 
> Hmm, het is een tabel met een paar honderdduizend records,
> zo wordt m'n database ineens weer wat MB's meer h� ;-)

En wat dacht je van: ��nmaal de conversie doen, en de frontend aanpassen dat
nummers er altijd kaal worden ingestoken?

-- 
Mvg, JeroenV
<URL:http://www.briachons.org/>
Re: SQL vraag
#4031
Author: HomeAutomation Freak
Date: Sun, 21 Sep 2003 16:52
13 lines
1845 bytes
>
>En wat dacht je van: ��nmaal de conversie doen, en de frontend aanpassen dat
>nummers er altijd kaal worden ingestoken?

dat zou betekenen dat alle nummers volgens ��nzelfde "formaat" zouden
moeten getoont worden.
een gebruiker moet de kans krijgen om op eender welke plaats in de
telefoonnummer, die haakjes, punten, schuine strepen enz ... te
gebruiken.
(nationale nummers, internationale nummers, interne nummers, GSM
nummers)
immers, zone 02 & zone 016, daar zou je bij het terug inlezen het
verschil niet tussen zien h�.
Re: SQL vraag
#4032
Author: Harro
Date: Sun, 21 Sep 2003 20:00
21 lines
2446 bytes
HomeAutomation Freak wrote:
>>In plaats van veel tijd investeren in een mooie, slimme of snelle
>>oplossing (altijd leuk), zou je misschien ook een extra kolom kunnen
>>toevoegen 'telnr_kaal' en 1x de conversie uitvoeren. Werkt allicht
>>niet als er de hele tijd veranderingen in 'telnr' gemaakt worden.
> 
> 
> Hmm, het is een tabel met een paar honderdduizend records,
> zo wordt m'n database ineens weer wat MB's meer h� ;-)

Een paar honderd KB * 10 cijfers is inderdaad slechts een paar MB, dus 
daar zou ik het niet voor laten.

Ik zou zeker niet voor iedere query een paar honderduizend * 6 
string-replacements uitvoeren, want dat zal waarschijnlijk behoorlijk 
wat performance gaan kosten. Ik weet niet of er veel mensen op die 
database gaan werken...

vr. gr,

Harro.
Re: SQL vraag
#4082
Author: Ramon Smits
Date: Sun, 21 Sep 2003 21:31
16 lines
1622 bytes
HomeAutomation Freak wrote:

> Hmm, het is een tabel met een paar honderdduizend records,
> zo wordt m'n database ineens weer wat MB's meer h� ;-)

Ja, maar de betreffende kolom is opeens wel index friendly! Ff een non 
unique index en het gaat als de brandweer!


M.v.g.,
Ramon


--
Ramon Smits aka. Exyll
http://www.exyll.net/ (ipv6 enabled)
Re: SQL vraag
#4084
Author: Rene
Date: Mon, 22 Sep 2003 08:08
23 lines
2052 bytes
"HomeAutomation Freak" <HomeAutomation.invalid@pandora.be> schreef in
bericht
> deze telefoonnummers zitten er "geformateerd" in,
> dwz. 031234567 zit erin als +32(0)3-1234567,
> maar kan er evengoed als 03/123.45.67. of andere varianten inzitten.
>
> de bedoeling is nu om een select te doen, die "alleen nummers"
> teruggeeft.

Ik weet niet of je versie 2000 gebruikt, maar dan kun je een UDF maken die
dit voor je doet zodat je niet in iedere query die hele replace code hoeft
te gebruiken. Volgens mij is jou veld een vrij tekstveld en kan ieder
karakter (ook per ongeluk ingetypt) kunnen voorkomen en dan werkt je code
niet meer, in een UDF kun je alle digits filteren enm retourneren.

Eigenlijk zou je applicatie al een standaard formaat moeten wegschrijven of
zou je met een trigger kunnen controleren of er ongeldige tekens zijn
ingevoerd. En zoals andere postings: schrijf een tweede veld weg met alleen
het telefoonnummer, dan kun je er ook op zoeken. En wees maar niet bang dat
de db te groot wordt, ik heb hier een db > 60 Gb (tabellen met >100 miljoen
records) en een selectie heb ik nog steeds in 1/10 seconde.

Rene
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads