Avatar billede hulla Novice
21. februar 2003 - 09:19 Der er 12 kommentarer og
1 løsning

dato beregning

Jeg har et datofelt i min DB, som sættes når et emne er oprettet i DB.
Jeg vil nu gerne have en sortering i min app så man f.eks. kan vælge at få vist alle emner der er oprettet for f.eks. 14 dage siden eller en måned siden (Det skal man kunne vælge).

Hvordan beregner man i SQL hvilken dato der ligger f.eks. 14 dage før dags dato?
Avatar billede mufoxe Nybegynder
21. februar 2003 - 09:22 #1
Det kan du bruge DateDiff til.
Avatar billede c971572 Nybegynder
21. februar 2003 - 09:22 #2
der er vidst en kommando der hedder between, hvor du kan angive 2 datoer...
Kom evt. med noget kode så ser vi på det...
Avatar billede bennytordrup Nybegynder
21. februar 2003 - 09:24 #3
select *
from Tabel
where cast(convert(nvarchar(10), [DatoFelt], 112) as datetime) = dateadd(d, -14, cast(convert(nvarchar(10), GetDate(), 112) as datetime))

Denne finder alle poster i Tabel, hvor datoen er 14 dage før dags dato. Tidspunkter ignoreres.
Avatar billede hulla Novice
21. februar 2003 - 09:26 #4
jeg kender jo ikke den anden dato, den skal beregnes ud fra getDate(),..
Avatar billede bennytordrup Nybegynder
21. februar 2003 - 09:28 #5
Det er gåså det, jeg gør via DataAdd. Trækker 14 dage fra den castede værdi af GetDate.
Avatar billede bennytordrup Nybegynder
21. februar 2003 - 09:29 #6
DateAdd(d, -14, GetDate())

er det essentielle. Problemet er, at der er tidspunkt med i den dato, så for at rense den returnerede dato for tidspunkt laver jeg denne:

case(convert(nvarchar(10), GetDate(), 12) as datetime)
Avatar billede bennytordrup Nybegynder
21. februar 2003 - 09:30 #7
Og laver den samme på tabellens datofelt - just in case.
Avatar billede c971572 Nybegynder
21. februar 2003 - 09:32 #8
SELECT * FROM Tabel1
WHERE (((Tabel1.dato) Between #12/12/2002# And #12/12/2003#));

så kan du bare sætte dine datoer ind i stedet for dem jeg har angivet...
Avatar billede nozio Nybegynder
21. februar 2003 - 10:22 #9
WHERE dato Between convert(nvarchar(10), GetDate()-14, 12)
and convert(nvarchar(10), GetDate(), 12)

SQLserveren kan godt klare udregningen på getdate()
Avatar billede bennytordrup Nybegynder
21. februar 2003 - 10:32 #10
nozio>>

Hvis du har en post med datoen 20020207 08:00:00:000, vil den ikke komme med i din beregning.
Avatar billede nozio Nybegynder
21. februar 2003 - 10:41 #11
nej - den er for gammel  :)  (2002)

min WHERE, ville da give dig alt mellem 030207 og 030221 eller ?
Avatar billede bennytordrup Nybegynder
21. februar 2003 - 10:44 #12
nozio >>

Jeg er ikke kommet mig over årsskiftet endnu :-/

Der skulle have stået 20030207

Rent faktisk vil den ikke. Hvis jeg kører den præcis nu, vil den give mig alt mellem

20030207 10:42:30:000 og 20030221 10:42:30:000

Dette på grund af, at det ikke er en date type men en *datetime* type.
Avatar billede hulla Novice
21. februar 2003 - 11:33 #13
tak for hjælpen benny.tordrup, det allerførste du skrev virkede perfekt og det med at jeg ikke kender datoen var til indlægget før dit :o)
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