Avatar billede mahyar Nybegynder
23. maj 2007 - 16:40 Der er 3 kommentarer og
1 løsning

LIKE Statement

Jeg har en tabel der har disse felter: EmployeeID, EmployeeName

Et udsnit af EmployeeName feltet som vi skal bruge:

EmployeeName
---------------
Greta Payne
Helle Lyngdal
Kiraom Andersen Gall Henriksen
Michael Rannje
Allan Frost
Allan Østergaard
Henning Tejsner
Ove Thuen
Søren Palm
Erik Foldø
Henriette Nanna Vedsø

Jeg vil gerne have en SQL Sætning der kan tælle de navne der har minimum et mellemnavn
Avatar billede _on_ Nybegynder
23. maj 2007 - 17:43 #1
Hej

Prøv denne:
SELECT Count(NavnPåDinTabel.EmployeeName) AS NumNavn
FROM NavnPåDinTabel
WHERE (((NavnPåDinTabel.EmployeeName) Like '* * *'));

Mvh
ON
Avatar billede kjulius Novice
24. maj 2007 - 00:19 #2
Jeg ville jo gerne kunne sige, at det kunne gøres ved at skrive

SELECT COUNT(*) AS PersonerMedMellemnavne
FROM dinTabel
WHERE UBound(Split(Trim(EmployeeName), ' ')) >= 2

men UBound funktionen kan åbenbart ikke udføres direkte i en forespørgsel, men så kan man jo lave sin egen lille funktion. I et modul kan man oprette en funktion som:

Public Function WordCount(Tekst As String) As Integer
    WordCount = UBound(Split(Trim(Tekst), " ")) + 1
End Function

Herefter kan man så bruge denne funktion i forespørgslen:

SELECT COUNT(*) AS PersonerMedMellemnavne
FROM dinTabel
WHERE WordCount(EmployeeName) > 2

Det returnerer antallet af rækker, hvor feltet EmployeeName indeholder flere end 2 tekststrenge adskilt af mindst én blank.
Med de viste eksempler burde det returnere det ønskede resultat...
Avatar billede kjulius Novice
24. maj 2007 - 00:48 #3
Hmm.. Det viser sig, at hvis EmployeeName er tomt (Null), giver det en fejl i funktionen som beskrevet ovenfor. Derfor skal den rettes til:

Public Function WordCount(Tekst As Variant) As Integer
    If IsNull(Tekst) Then
        WordCount = 0
    Else
        WordCount = UBound(Split(Trim(Tekst), " ")) + 1
    End If
End Function
Avatar billede kjulius Novice
24. maj 2007 - 19:28 #4
Du bad om en løsning med et LIKE statement, og det fik du. Så at pointene går til  on er som det skal være. :-)
Vær bare opmærksom på, at hvis du ved en fejl skulle komme til at indtaste et mellemrum for meget mellem navnene, vil dette blive opfattet som et mellemnavn. Så det kræver lidt datadisciplin!

Jeg troede egentligt, at min kode tog højde for det, men Split funktionen laver samme nummer, så koden bør se sådan ud:

Public Function WordCount(Tekst As Variant) As Integer
    Dim Arr() As String
    Dim x As Integer
    If IsNull(Tekst) Then
        WordCount = 0
    Else
        Arr = Split(Trim(Tekst), " ")
        For x = 0 To UBound(Arr)
            If Arr(x) <> "" Then
                WordCount = WordCount + 1
            End If
        Next
    End If
End Function

Nu returnerer den antallet af ord (navne), uanset hvor mange mellemrum der skulle være mellem dem.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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