Toon posts:

[(MS) SQL] Between date... Gaat niet goed!

Pagina: 1
Acties:

Verwijderd

Topicstarter
Zit met het volgende probleem;

Heb een statistieken database met daarin 3 kolommen;

id, naam, datum

die datum heeft natuurlijk een 'date/time' inhoud...

Als ik de data van de laatste 7 dagen wil opvragen;
code:
1
select * from stats where tijd > #8-11-2004# order by hits desc;


Dan geeft hij steeds de volgende fout terug:
code:
1
2
3
Microsoft OLE DB Provider for SQL Server error '80040e14' 

Line 1: Incorrect syntax near '#'.


Ik wordt er zo langzamerhand hopeloos van... De volgende sql statements heb ik al geprobeerd:
code:
1
2
3
4
select * from stats where tijd > #8-11-2004# order by hits desc;
select * from stats where tijd > #8-11-2004 00:00:00# order by hits desc;
select * from stats where tijd > to_date('8-11-2004', 'dd-mm-yyyy') order by hits desc;
select * from stats where tijd > #11/8/2004# order by hits desc;


Allemaal met de zelfde fout... Wat doe ik verkeerd?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
SQL Server gebruikt ' als dateseparator in plaats van #.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 20:54
Ik zou trouwens het CONVERT statement gebruiken als je je query zo opbouwt...

(Als je query gemaakt wordt dmv een client-applicatie, gebruik dan parametrized queries)

https://fgheysels.github.io/


Verwijderd

Probeer eens tijd > 'yyyymmdd'

Verwijderd

Topicstarter
P_de_B schreef op maandag 15 november 2004 @ 11:57:
SQL Server gebruikt ' als dateseparator in plaats van #.
code:
1
Select * from stats where tijd > '8-11-2004' order by hits desc;


Nu krijg ik geen fout, maar ik krijg "simpel" gewoon heel de tabel voor me neus... Dus met datums die in 2-3-2004 liggen etc.

edit:
:Z op de server de timezone settings aangepast en werken :Z

[ Voor 14% gewijzigd door Verwijderd op 15-11-2004 12:03 ]


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
code:
1
select * from stats where tijd > Cast('8-11-2004' as datetime) order by hits desc;


Om te testen even een datum gebruiken met meer dan 12 dagen, bijv 31-12-2003, dan weet je ook zeker dat je dag en maand goed gelezen worden.

Eventueel kun je alle DateParts ook los zetten, of werk met parameterised queries zoals hierboven al genoemd.

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:54
Je dateparts los zetten is niet altijd een goed idee; als je een index gelegd hebt op die date column, kan de index niet gebruikt worden als je filtert op die column mbhv de dateparts.

https://fgheysels.github.io/


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
whoami schreef op maandag 15 november 2004 @ 13:05:
Je dateparts los zetten is niet altijd een goed idee; als je een index gelegd hebt op die date column, kan de index niet gebruikt worden als je filtert op die column mbhv de dateparts.
Ik bedoel dan ook eigenlijk er een stored proc van maken, en je datum var eerst omzetten naar een datetime var, zetten van de verschillende dateparts, en dan als argument met de query meegeven.

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 13:54
Verwijderd schreef op maandag 15 november 2004 @ 11:56:

Als ik de data van de laatste 7 dagen wil opvragen;
code:
1
select * from stats where tijd > #8-11-2004# order by hits desc;
Probeer eens:
code:
1
select * from stats where tijd > getdate()-7 order by hits desc;


Dan krijg je ook alles van de laatste 7 dagen (of precieser, alles wat minder dan 7*24 uur oud is).

  • Equator
  • Registratie: April 2001
  • Laatst online: 10:23

Equator

Crew Council

🦺#Rodekruis #whisky #barista

Je kan het ook nog met datepart proberen:
Van afgelopen week:
code:
1
Select * from stats where datepart(week, tijd) = datepart(week, getdate())-1


afgelopen maand:
code:
1
Select * from stats where datepart(month, tijd) = datepart(month, getdate())-1


als je die -1 weglaat krijg je alleen de huidige week/maand te zien.

Een voordeel van datepart is dat hij hele maanden/weeken/kwartalen/jaren laat zien en niet bijvoorbeeld de afgelopen 30 dagen als maand..

[ Voor 18% gewijzigd door Equator op 15-11-2004 17:17 ]


Verwijderd

CyberJ schreef op maandag 15 november 2004 @ 17:13:
Je kan het ook nog met datepart proberen:
Van afgelopen week:
code:
1
Select * from stats where datepart(week, tijd) = datepart(week, getdate())-1
pas op! Je krijgt dan ook de weken van voorgaande jaren te zien...
Je moet ook het jaar meenemen in de vergelijking.

  • Equator
  • Registratie: April 2001
  • Laatst online: 10:23

Equator

Crew Council

🦺#Rodekruis #whisky #barista

Ok, goed dat je dit meldt. Daar had ik ff overheen gekeken:
Zoiets dan..
code:
1
SELECT * FROM Stats WHERE DATEPART(week, tijd) = DATEPART(week, GetDate())-1 AND DATEPART(year, tijd) = DATEPART(year, GetDate())

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Gebruik dan datediff()
SQL:
1
SELECT * FROM Stats WHERE DateDiff(week, tijd, GetDate())=0

of
SQL:
1
SELECT * FROM Stats WHERE DateDiff(day, tijd, GetDate())<7

| Toen / Nu


Verwijderd

Topicstarter
Mijn dank is groot voor al jullie bijdragen!

Zeer nuttig en een gedenkwaardige bookmark ;) TnQ!

Verwijderd

En om de bookmark wat completer te maken:

met CONVERT(datetime, '08/11/2004', 103) krijg je een datetime op basis van ons gebruikelijke datumformaat (dd/mm/yyyy).

Dit geeft dan:

code:
1
select * from stats where tijd > CONVERT(datetime, '8/11/2004', 103) order by hits desc;

[ Voor 37% gewijzigd door Verwijderd op 16-11-2004 22:56 ]

Pagina: 1