webForumDet fria alternativet

Sökning som ignorerar mellanslag

ASP

14 svar · 811 visningar · startad av jockooono

Medlem sedan mars 200561 inlägg
Frågan#1

Jag har en asp-sida där man ska kunna söka efter kunder genom att knappa in telefonnummer. Problemet är att en del telefonnummer innehåller mellanslag och andra inte. Hur gör jag om man knappar in t.ex. "08 - 88 88 88" så ska den hitta "08-888888", "08-88 88 88" och "08-888 888" och även då åt andra hållet "08-888888" så ska den hitta "08 - 88 88 88" m.m. alltså få den att ignorera mellanslag.

SELECT * FROM KUNDER WHERE Telefon = '" & telefon & "' ORDER BY Fornamn, Efternamn
Medlem sedan dec. 20003 887 inlägg
#2

Du får göra en replace innan du testar datat.

Följdfrågan är alltså vilket DBMS använder du?

Medlem sedan mars 200561 inlägg
#3

Använder mig av en Access-databas.

Medlem sedan dec. 20025 483 inlägg
#4
SELECT * FROM KUNDER WHERE replace(Telefon, " ", "") = '" & replace(telefon, " ", "") & "' ORDER BY Fornamn, Efternamn
Medlem sedan mars 200561 inlägg
#5

Visste inte att det fanns en replace funktion i SQL. Får det dock inte att fungera från min asp-sida får bara "Slut på programsats förväntas." Det är

replace(Telefon, " ", "")

som den inte gillar har försökt med

replace(Telefon, ' ', '')

då får jag "Odefinierad funktion 'replace' i uttryck."

Medlem sedan dec. 20025 483 inlägg
#6

Vilken version av Access gäller det?

Medlem sedan mars 200561 inlägg
#7

Access 2003, det skumma är att om jag kör frågan direkt i access så fungerar den.

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Connstr
Set RS = Server.CreateObject("ADODB.RecordSet")
SQL = "SELECT * FROM KUNDER WHERE replace(Telefon, " ", "") = '" & replace(telefon, " ", "") & "' ORDER BY Fornamn, Efternamn"
RS.Open SQL, Conn, 0, 1
Medlem sedan dec. 20025 483 inlägg
#8

Citationstecknena i den första replace():en får bytas mot apostrofer. Sökning på Google ger bl.a. detta (#27), alternativt skapa en egendefinierad funktion som använder replace().

Medlem sedan mars 200561 inlägg
#9

Menad du:

replace(Telefon, ' ', '')

i så fall funkar det inte.

Medlem sedan dec. 20025 483 inlägg
#10

Japp! Gav ovanstående länkar någonting?

Medlem sedan juni 200032 967 inlägg
#11

... och vad betyder "funkar inte"? På vilket sätt? Felmeddelande? Hur ser din kod ut nu?

Medlem sedan dec. 20025 483 inlägg
#12

Det bästa måste ändå vara att göra replace() innan datat läggs in i tabellen och sedan:

SELECT * FROM KUNDER WHERE Telefon = '" & replace(telefon, " ", "") & "' ORDER BY Fornamn, Efternamn
Medlem sedan mars 200561 inlägg
#13

Får felmeddelandet:
"Odefinierad funktion 'replace' i uttryck."

Ha tyvärr ingen inloggning till experts-exchange så jag kunde inte se svaret. Funderad dock på att bli medlem...

Får väl ta och konvertera om alla telefonnummer i databasen och sen göra replace():en vid inmatningen. Tyvärr kan telefonnumrena se lite konstiga ut utan mellanslag. 08-88 88 88 ser mycket bättre ut än 08-888888 därför hade jag hoppats på att slippa ta bort mellanslagen.

Medlem sedan dec. 20025 483 inlägg
#14

Du behöver inte vara medlem. Längre ned kan läsas

You cannot use the standard, built-in Replace function with ODBC. You might be able to define a User_Function, that could then be seen by the ODBC connection:

Define the function in a standard Module, in your Access Database :

Public MyReplace(strSource as String, strReplaceWhat as String, strReplaceWith as String) as String
MyReplace = Replace(strSource, strReplaceWhat, strReplaceWith )
End Function

Medlem sedan dec. 1999653 inlägg
#15

Det gör inget om du tar bort mellanslagen, för du kan när du presenterar de göra en liten if-sats (obs, otestat):

tfn = "08-224466"

If Len(Right(tfn,Len(tfn)-InStr(tfn,"-"))) = 6 Then tfn = Left(tfn,InStr(tfn,"-")+2) & " " & Mid(tfn, Len(Left(tfn,InStr(tfn,"-")+3)),2) & " " & right(tfn,2)
If Len(Right(tfn,Len(tfn)-InStr(tfn,"-"))) = 7 Then tfn = Left(tfn,InStr(tfn,"-")+3) & " " & Mid(tfn, Len(Left(tfn,InStr(tfn,"-")+4)),2) & " " & right(tfn,2)
If Len(Right(tfn,Len(tfn)-InStr(tfn,"-"))) = 8 Then tfn = Left(tfn,InStr(tfn,"-")+3) & " " & Mid(tfn, Len(Left(tfn,InStr(tfn,"-")+4)),3) & " " & right(tfn,2)

Response.Write tfn

det är förmodligen inte det bästa å snyggaste sättet, med det borde formatera telefonnr snyggt, å då är ju problemet "löst"! =)

denna struntar alltså i hur många siffror som finns i riktnumret som visas innan "-" och formaterar sen ett telefonnummer som såhär:
6 siffror efter "-": RRR-NN NN NN
7 siffror efter "-": RRR-NNN NN NN
8 siffror efter "-": RRR-NNN NNN NN

Eller tja, bör göra iaf.. :)
Kanske att du får köra en cStr() på telefonnumret först, men borde nog inte vara så..

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)