[SQL]hoe de huidige datum/gisteren omschrijven

Pagina: 1
Acties:
  • 1.076 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 14:52
Ik moet even een kleine query aanmaken om een tabel te updaten met informatie uit een andere tabel. Ik moet alleen dit elke dag doen, de oude informatie moet worden weggegooid.

In de DTS import wizard gebruik ik de volgende query.

Select *
From waarnemingen
Where datumtijd > 25-07-2005

Aangezien dit elke dag moet heb ik liever iets als:

select *
From waarnemingen
Where datumtijd > gisteren

Daarnaast komt deze informatie uit een andere database.
Alvast bedankt :)

Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Met DateDiff en GetDate() kom je een heel eind denk ik :)

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


Acties:
  • 0 Henk 'm!

Anoniem: 56060

Select *
From waarnemingen
Where datumtijd > DateAdd(d, -1 GetDate())

GetDate() geeft ook tijden terug, weet niet of dat uitmaakt voor jou situatie

[ Voor 39% gewijzigd door Anoniem: 56060 op 26-07-2006 14:08 ]


Acties:
  • 0 Henk 'm!

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 14:52
ik heb nu:

SELECT *
FROM gladheid.dbo.tblGMSWaarnemingen
WHERE Datediff(day, GetDate(),datumtijd)=0

maar hij krijgt een miljoen rijen terug en dit duurt gewoon veel en veels te lang (ik heb hem nog niet afgemaakt maar als ik hem specifieker maakt duurt het al minuten.

Als ik:
SELECT idGMS
FROM gladheid.dbo.tblGMSWaarnemingen
WHERE datumtijd > '2006-07-26'

doe gaat het een stuk sneller.
Is er een manier om dit sneller te maken?

Acties:
  • 0 Henk 'm!

  • DND_Roche
  • Registratie: Juli 2006
  • Laatst online: 02-01-2024
In Oracle:

SQL:
1
2
3
Select *
  From waarnemingen
 Where datumtijd > Trunc( Sysdate) - 1

Acties:
  • 0 Henk 'm!

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 14:52
helaasch het is voor msql

Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Omdat je een functie gebruikt om de DatumTijd kolom kan de index niet gebruikt worden, daarom zal de query een stuk trager zijn. In dit geval kun je dus beter een dateadd gebruiken

SQL:
1
2
3
SELECT *
FROM tblGSMWaarneming
WHERE DatumTijd > DATEADD(d,-1,GetDate()) 

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


Acties:
  • 0 Henk 'm!

  • DND_Roche
  • Registratie: Juli 2006
  • Laatst online: 02-01-2024
Kan je er niet iets van maken met Curdate() - 1?

Ik weet het ook niet, ik kan met google wel wat varianten vinden als ik zoek om MySQL sysdate.

Acties:
  • 0 Henk 'm!

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 13-02 14:20

Jaspertje

Max & Milo.. lief

Als je in je query analyser
SQL:
1
print getdate()-1
doet, dan zie je gister. Dan moet het formaat in je database ook wel goed zijn, maar dat is alles wat je nodig hebt

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Jaspertje schreef op woensdag 26 juli 2006 @ 15:05:
Dan moet het formaat in je database ook wel goed zijn
Nu zijn datums en de bijbehorende overdaad aan standaarden rampdingen, maar over welk formaat heb je het nu? Dit is toch iets wat altijd goed gaat, of begrijp ik het nu niet?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 13-02 14:20

Jaspertje

Max & Milo.. lief

kenneth schreef op woensdag 26 juli 2006 @ 15:14:
[...]
Nu zijn datums en de bijbehorende overdaad aan standaarden rampdingen, maar over welk formaat heb je het nu? Dit is toch iets wat altijd goed gaat, of begrijp ik het nu niet?
Jawel, je begrijpt me goed, maar als je bijvoorbeeld een nvarchar veld hebt waar 15-07-2004 instaat, dan hebben we het niet over een datum meer... (het was meer een side note)

[ Voor 0% gewijzigd door Jaspertje op 26-07-2006 15:25 . Reden: Dont ask waarom ik dat zou doen.. maar je komt het tegen :( ]


Acties:
  • 0 Henk 'm!

  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 31-05 13:43
DarkShadow schreef op woensdag 26 juli 2006 @ 14:36:
ik heb nu:

SELECT *
FROM gladheid.dbo.tblGMSWaarnemingen
WHERE Datediff(day, GetDate(),datumtijd)=0

maar hij krijgt een miljoen rijen terug en dit duurt gewoon veel en veels te lang (ik heb hem nog niet afgemaakt maar als ik hem specifieker maakt duurt het al minuten.

Als ik:
SELECT idGMS
FROM gladheid.dbo.tblGMSWaarnemingen
WHERE datumtijd > '2006-07-26'

doe gaat het een stuk sneller.
Is er een manier om dit sneller te maken?
Kijk eens naar het verschil in code, zou ik zeggen. De bovenste doet voor alle (1 miljoen) records een datediff op de kolom datumtijd en moet alle data ophalen, de onderste query haalt alleen een ID op en hoeft geen verschil te berekenen. Probeer eens:

SELECT idGMS
FROM gladheid.dbo.tblGMSWaarnemingen
WHERE datumtijd > getdate()-1

Acties:
  • 0 Henk 'm!

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 14:52
JJvG schreef op woensdag 26 juli 2006 @ 16:42:
[...]


Kijk eens naar het verschil in code, zou ik zeggen. De bovenste doet voor alle (1 miljoen) records een datediff op de kolom datumtijd en moet alle data ophalen, de onderste query haalt alleen een ID op en hoeft geen verschil te berekenen. Probeer eens:

SELECT idGMS
FROM gladheid.dbo.tblGMSWaarnemingen
WHERE datumtijd > getdate()-1
dit werkt idd. Ook met alle kollomen gaat het vrij snel. Bedankt :)

Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Zoals Sikkow al zei:
Let op dat getdate() ook een tijd meegeeft, aangezien de kolomnaam 'datumtijd' suggereert dat er ook een tijd in staat mis je dus de records die gisteren voor de tijd waarop je nu de query runt zijn toegevoegd...

[ Voor 3% gewijzigd door TheRookie op 27-07-2006 10:53 ]


Acties:
  • 0 Henk 'm!

  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 31-05 13:43
Voor datum zonder tijd kun je gebruiken:
(1)
SQL:
1
select cast(CONVERT(CHAR(8),getdate()-1,112) as smalldatetime)

(2)
SQL:
1
select DATEADD(D,-1,CONVERT(CHAR(8),CURRENT_TIMESTAMP,112))


Code doet het volgende:
(1) bepaal datum gisteren, formateren volgens bepaald formaat (20060726....), eerste 8 karakters eraf halen, converteren naar smalldatetime datatype
(2) bepaald huidige datum/tijd, formateren volgens bepaald formaat (20060726....), dag er van af halen (met impliciete conversie)

Beide zouden gewoon goed moeten werken, performance kun jij beter meten...

[ Voor 4% gewijzigd door JJvG op 27-07-2006 15:17 ]

Pagina: 1