Avatar billede alpapa Nybegynder
11. december 2003 - 10:42 Der er 14 kommentarer og
1 løsning

MS SQL2000 Datepart problemer

Hejsa alle

Sidder og bøvler med denne SQL fætter, kan I se hvad jeg gør forkert?

foedselsdato står således i datebasen = 14-12-1971
dag er en streng som fx = 14
maaned er en streng som fx = 12


SELECT ID FROM ANSAT WHERE DATEPART(d,foedselsdato) = " + dag + " AND DATEPART(m,foedselsdato) = " + maaned + "

Den giver mig følgende fejl:
Invalid parameter 1 specified for datepart.

Hvad gør jeg forkert?

På forhånd tak
alpapa
Avatar billede trer Nybegynder
11. december 2003 - 10:55 #1
prøv:

select id from ansat
where datepart(d,foedselsdato)=cast(dag as int)
and datepart(m,foedselsdato)=cast(maaned as int)
Avatar billede alpapa Nybegynder
11. december 2003 - 11:06 #2
Nu skriver den: Invalid column name 'dag'.
Avatar billede trer Nybegynder
11. december 2003 - 11:16 #3
Hmm.. hvordan har du defineret dag og maaned?  Er det kolonner, variabler i dit program eller variabler i T-SQL ?
Avatar billede alpapa Nybegynder
11. december 2003 - 11:19 #4
Den eneste kolonne jeg bruger er foedselsdato. Her tester jeg om dagen i foedselsdato er lig min streng variabel dag og om måneden i foedselsdato er lig min streng variabel maaned.
Avatar billede alpapa Nybegynder
11. december 2003 - 11:20 #5
PS: Det fungerede i Access, men jeg har smidt det over på en MS SQL2000 database, og nu spiller det knap så godt længere...
Avatar billede trer Nybegynder
11. december 2003 - 11:24 #6
dvs at du har en query i access du kalder - a la

"select id from ansat where datepart(d,foedselsdato)="+dag+" and ...

Afvikler du din query i Access (altså via linkede tabeller og ikke en ADP)?  Hvis så, så skal den "gamle" syntax fra Access stadig bruges. Access forstår ikke SQL Servers T-SQL.
Avatar billede trer Nybegynder
11. december 2003 - 11:26 #7
Hmm.. prøv at  bruge day og month eller dd og mm som parameter i datepart fremfor enkeltbogstavs-forkortelserne.
Avatar billede alpapa Nybegynder
11. december 2003 - 11:29 #8
Øhh, ved ikke helt hvad du mener... T_SQL? Jeg er ikke så skrap i det her.
Startede med at få det hele til at virke på Access, herefter importerede jeg mine Access tabeller over i MS SQL databasen og lavede mine relationer igen.
Avatar billede trer Nybegynder
11. december 2003 - 11:34 #9
Hvor afvikler du din query?  I Access eller i en applikation?
Avatar billede alpapa Nybegynder
11. december 2003 - 11:34 #10
Når jeg prøver dette: DATEPART(dd,foedselsdato) = " + dag + " 
Får jeg følgende fejl: Specified cast is not valid.

Når jeg prøver dette: DATEPART('dd',foedselsdato) = " + dag + " 
Får jeg følgende fejl: Invalid parameter 1 specified for datepart.
Avatar billede alpapa Nybegynder
11. december 2003 - 11:34 #11
Application
Avatar billede trer Nybegynder
11. december 2003 - 11:38 #12
dvs du har en streng du opbygger i vb eller c# a la

rsSQL = "select id from ansat where " & _
        "datepart(d,foedselsdato)="+dag+" and " & _
        "datepart(m,foedselsdato)="+maaned+" "


eller ?
Avatar billede alpapa Nybegynder
11. december 2003 - 11:42 #13
Jeps i C#, derfor + istedetfor &
Min streng dag er fx lig 14, den vil jeg gerne tjekke med dagen i foedselsdato
Avatar billede trer Nybegynder
11. december 2003 - 11:49 #14
Prøv at køre din query direkte i Query Analyzer (erstat dine variabler dag og maaned med konstantværdierne).

brug dd og mm eller day og month i stedet for d og m
Avatar billede alpapa Nybegynder
11. december 2003 - 13:00 #15
Takker for hjælpen, har fået den til at spille:
SELECT (FLOOR(datediff(day, foedselsdato, GETDATE()) / 365.25)) AS alder, ID, navn, foedselsdato FROM ANSAT WHERE (DATEPART(d, foedselsdato) = '" + dag + "') AND (DATEPART(m, foedselsdato) = '" + maaned + "') AND fd = 0 AND godkendt = 1"
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