Avatar billede Simon Praktikant
14. april 2004 - 11:20 Der er 8 kommentarer og
2 løsninger

flere parametre, or, like

Hej
Jeg ønsker et SQL-statement, som udtager alle records hvor kolonnenavn er enten "peter", eller "line". Det kan nedenstående ved at jeg skriver OR mellem betingelserne.
--------------------------------
SELECT *
FROM tabel-navn
WHERE kolonnenavn LIKE 'peter' OR kolonnenavn LIKE 'line'
------------------------------
Men jeg kunne godt tænke mig at udtrykke dette ved kun én betingelse, noget i den stil.
-----------------------------
SELECT *
FROM tabel-navn
WHERE kolonnenavn LIKE 'peter OR line'

Kan dette lade sig gøre? Eller findes der en smartere løsning?
(Jeg skal bruge det i en Stored Procedure, hvor jeg kun vil have et bestemt antal parametre, men hvor betingelsen kan være flere navne: peter, line, hans, kurt...)
Avatar billede arne_v Ekspert
14. april 2004 - 11:47 #1
WHERE kolonnenavn IN ('peter','line')
Avatar billede arne_v Ekspert
14. april 2004 - 11:47 #2
Iøvrigt når der ikke er wildcard i strengen bør du nok bruge = fremfor LIKE.
Avatar billede Simon Praktikant
14. april 2004 - 11:54 #3
Ja jeg kan godt bruge IN, men jeg vil stadig gerne have mulighed for at bruge wildcards. Hvordan gør jeg det?
Avatar billede arne_v Ekspert
14. april 2004 - 12:00 #4
Hvis du vil have wildcards og bruge LIKE så hænger du nok på OR.
Avatar billede Simon Praktikant
14. april 2004 - 12:10 #5
Det ville også gå an hvis det findes en måde at sende det ned til min stored procedure på, hvor jeg stadig kun har én parameter. hmmm
Avatar billede arne_v Ekspert
14. april 2004 - 12:28 #6
Jeg kan godt se problemet.

Måske en SP med en masse argumenter og default værdier og forskellig SQL
alt efter hvor meget der er sat. Ikke kønt, men ...

Måske en anden har en bedre løsning ...
Avatar billede iakob Nybegynder
22. april 2004 - 08:15 #7
Jeg har tidligere gjort det at jeg har lavet en forholdvis lang parameter, f.eks. en streng på varchar(8000).
Det er så en komma separeret liste af navne, f.eks: 'Peter, Line, Kaj'
Før min query, så løber jeg strengen igennem navn for navn og bygger en where clausul (via patindex, substring mv). Where clausulen bliver så på formen: where navn like 'peter' or navn like 'line' etc
Derefter kan man dynamisk knalde sin query af.

Du kan også kræve at parameteren er selve where clausulen, så slipper du for at regne den ud.

Det bliver ikke hurtigere af at være dynamisk, men det er den eneste måde at gøre det på.
Avatar billede arne_v Ekspert
24. april 2004 - 17:51 #8
simi>

Kommet videre ?
Avatar billede arne_v Ekspert
29. maj 2004 - 00:24 #9
??
Avatar billede arne_v Ekspert
25. juli 2004 - 23:03 #10
??
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
Computerworld tilbyder specialiserede kurser i database-management

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