Avatar billede dkkarpen Nybegynder
20. juni 2001 - 13:13 Der er 16 kommentarer og
1 løsning

Wilcard i SQL streng

Halløj

Jeg søger f.eks. i et langt textfelt. Hvordan laver jeg en sql streng der kun har wilcard til højre?

Altså SQL = \"Select * from db where text like \'\" & str & \"%\'\"
Avatar billede dkkarpen Nybegynder
20. juni 2001 - 13:14 #1
Jeg bruger SQL Server 2000
Avatar billede ldanielsen Nybegynder
20. juni 2001 - 13:17 #2
SQL = \"Select * from db where text like \'\" & str & \"%\'\"

Det er helt rigtigt, virker det ikke?
Avatar billede ldanielsen Nybegynder
20. juni 2001 - 13:17 #3
Det virker i SQL 7.0
Avatar billede dkkarpen Nybegynder
20. juni 2001 - 13:19 #4
Jeg kunne f.eks. have teksten:

\"Dette er min nye tekst. Hvad mon den skal indeholde\"

Jeg vil gerne kunne søge på \"holde\" uden at få resultatet \"indeholde\" med.
Avatar billede kbdesign Nybegynder
20. juni 2001 - 13:41 #5
Så skal du jo søge på \" holde\"...
Avatar billede dkkarpen Nybegynder
20. juni 2001 - 13:51 #6
Nej ;-) Vis bare det var så vel.
Avatar billede sbm Nybegynder
20. juni 2001 - 23:07 #7
Ud fra det du skriver, så kan jeg forstå at du ønsker at finde de tekst-strenge der indeholder ord der f.eks. STARTER med ordet holde, men ikke ord der SLUTTER med holde, eller har holde som en del af det samlede ord.
Du ønsker at finde HOLDER men ikke BEHOLDER eller INDEHOLDE. Korrekt?

Dette kan du ikke gøre med en simpel SQL-wildcard, for den vil kun undersøge om hele strengen starter med dette. Den vil ikke kun finde det selv om det er en del af det. Du bliver nødt til først at lave en generel wildcard-søgning med % tegn på begge sider af det du leder efter. Så må du igang med benarbejdet, og undersøge strengene mere nøje v.hj. af noget asp-kode.

Så vidt jeg kan se, så kan det ikke løses med ren SQL.
Avatar billede icedox Nybegynder
21. juni 2001 - 00:31 #8
Hej dkkarpen!
Hvis det skal være like, så ville gøre :
SQL = \"Select * from db where text like \'%\" & str & \"%\'\"
Sådan!
J.
Avatar billede dkkarpen Nybegynder
21. juni 2001 - 08:21 #9
sbm>>Ok - hvad gør jeg så mere præcist?
Avatar billede proaccess Nybegynder
21. juni 2001 - 08:41 #10
Det burde da være muligt at søge på {mellemrum} og HOLDE, således:

SQL = \"SELECT * FROM db WHERE text LIKE \'% \" & str & \"%\'\"

/proAccess
Avatar billede proaccess Nybegynder
21. juni 2001 - 08:43 #11
Eller:

SQL = \"SELECT * FROM db WHERE text LIKE \'% \" & str & \"%\' OR text LIKE \'\" & str &\"%\'\"

Så medtages også hvis HOLDER er det første ord i text...

Avatar billede sbm Nybegynder
21. juni 2001 - 09:35 #12
Proaccess >> Du laver en automatisk antagelse om at ordet altid er afgrænset af et mellemrum. Det behøver ikke altid at være tilfældet. Nu hvor afgrænsningen er til højre vil det som regel være det, men ikke nødvendigvis altid. Undtagelserne forekommer oftere hvis du også ønsker at finde ord der slutter på en bestemt streng. Hvis nu man ønsker at søge på ord der slutter på holde, og man derfor gerne vil se ordet indeholde, kan vi nemt risikere at det er det sidste ord i et sætning, og det efterfølgende tegn er et punktum eller et komma istedet for mellemrum. Dertil kommer der muligheder som tankestreger, kolon eller hvis nu det er det sidste ord i en sætning der er skrevet i parantes.

dkkarpen >> Jeg beklager, men jeg har desværre ikke den fornødne tid til at kigge på en løsning. Jeg ville blot gøre opmærksom på at en pæn løsning ikke kan laves på denne måde. Du skal kigge på streng-manipulering i ASP. Du kan sikkert finde noget interessant på www.activeserverpages.dk , www.asp101.com , eller muligvis www.netcoders.dk

Held og lykke med det. :-)
Avatar billede sbm Nybegynder
21. juni 2001 - 09:56 #13
Måske lige lidt retningslinier for hvordan jeg ville gøre det...

Du starter med en sql-sætning der finder alle de indlæg der indeholder dit søgeord et eller andet sted i strengen. Dvs. du har wildcard på begge sider af søgeordet.
Derefter smider du alle rækker i dit recordset igennem en funktion der finder de rækker der har ordet med på en sådan måde som du kræver det skal være.
Eksempel:
Du laver en \"Select * from TABEL where KOLONNENAVN like \'%holde%\'
Nu har du et recordset der indeholder alle de rækker der har ordet holde et eller andet sted i den kolonne, og du har dermed fået sorteret alle de uinteressante fra.
Nu kan du lave en WHILE NOT RS.EOF og køre ned gennem dit recordset. Send så søgefeltet over i en funktion der laver den videre søgning. Eksempel:
findOrdDerStarterMed (soegeord, RS(\"Kolonnenavn\"))
kunne være en funktion der returnerer TRUE hvis det pågældende søgeord findes i starten af en ord, og false hvis det ikke er tilfældet. Jeg mener der er en funktion der kan returnere placringen af dit ord i strengen, og herefter må du så undersøge hvilke tegn der står umiddelbart foran og bagved. Hvis der ikke står noget alfanumerisk tegn bagefter, returneres TRUE.

Jeg håber det kunne hjælper lidt?
Avatar billede sbm Nybegynder
21. juni 2001 - 09:59 #14
Staveplade til mig.

De to sidste sætninger skulle være:

Hvis der ikke står noget alfanumerisk tegn FORAN, returneres TRUE.

Jeg håber det kunne HJÆLPE lidt?
Avatar billede icedox Nybegynder
21. juni 2001 - 10:18 #15
OK! Lad os \"glemme\" alt om sql for stk tid!
Hvad med at \"skære\" søgeordet ned!

Dim strOrdende
strOrdende = right(request(\"bogstav\"),5)

\'så kommer 5 sidste bogstaver i ordet inde\"holder\".
Bare et forslag!
J.
Avatar billede icedox Nybegynder
21. juni 2001 - 11:16 #16
Ja, du kalder variablen for str
Dim strOrdende
strOrdende = right(str,5)
sådan ?
Avatar billede dkkarpen Nybegynder
28. marts 2003 - 09:54 #17
lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester