Avatar billede superwulff Nybegynder
28. november 2011 - 11:39 Der er 13 kommentarer og
1 løsning

GETDATE() minus 1 uden timestap

Hej Alle

Jeg forsøger at hive sager ud fra en database fra dagen før dags dato ved at bruge flg SQL kommando

SELECT *
FROM SS_LM_DATA
WHERE CLOSE_TIME>DATEADD(day, -1, GETDATE())

Det virker for så vidt også, bortset fra at den viser mig kun sager der er lukket igår efter tidpsunktet queryen er kørt. fx hvis jeg kører den kl 10 får jeg alt lukket igår efter kl 10.

Hvad skal jeg gøre for at få hele dagen med ?
Avatar billede niklask Nybegynder
28. november 2011 - 11:48 #1
SELECT *
FROM SS_LM_DATA
WHERE CONVERT(varchar(10),CLOSE_TIME,111 > CONVERT(varchar(10),getDate()-1,111)
Avatar billede niklask Nybegynder
28. november 2011 - 11:49 #2
Der mangler lige en parentes efter 111:

SELECT *
FROM SS_LM_DATA
WHERE CONVERT(varchar(10),CLOSE_TIME,111) > CONVERT(varchar(10),getDate()-1,111)
Avatar billede superwulff Nybegynder
28. november 2011 - 12:01 #3
Genialt - tak :-)

det virkede..

Kan du smide et svar og evt kort forklare hvorfor det virkede ?

Tak
Avatar billede superwulff Nybegynder
28. november 2011 - 12:10 #4
faktisk - stryg det, det virkede kun halvt..

Jeg får sager fra tider før hvad klokken er når jeg kører query, og efter, men af en eller anden grund får jeg kun 135 sager, og jeg ved det blev lukket over 400..

men måske er det mig der klokker i det, da jeg ændrede -1 til -3 for at få tal fra i fredags ? måske man ikke bare kan gøre det sådan ?
Avatar billede niklask Nybegynder
28. november 2011 - 12:15 #5
Med CONVERT() laver vi din datetime om til en varchar, og bruger stilen 111, som er yy/mm/dd.

Jeg vil mene det skulle virke perfekt.
Avatar billede superwulff Nybegynder
28. november 2011 - 12:18 #6
Ja, Undskyld det gjorde det selvfølgelig også - jeg glemte at den server jeg bruger er bagefter så fredag er -4 fra idag og ikke -3.

Det virker perfekt - smid et svar hvis du samler point :-)
Avatar billede niklask Nybegynder
28. november 2011 - 12:25 #7
Svar :)
Avatar billede Syska Mester
28. november 2011 - 12:59 #8
SELECT * FROM table WHERE CLOSE_TIME > DATEADD(day, -1, CAST(GETDATE() AS DATE)

Dvs. overstående smider tidsvariable af en Datetime væk.

Tror ikke alt det convert performer godt hvis du engang får mange rows.
Avatar billede janus_007 Nybegynder
28. november 2011 - 17:15 #9
Det er altid dumt at konvertere på den "forkerte" side, brug buzzzz løsning, den er korrekt :)

Som forøvrigt kan optimeres yderligere sådan her ;-)

SELECT * FROM table WHERE CLOSE_TIME > cast(getdate()-1 as date)
Avatar billede superwulff Nybegynder
29. november 2011 - 09:53 #10
Janus, hverken din eller buzzzz's løsning virker, hvis jeg putter det ind og kører queryen sker der ingen ting :-/

SELECT *
FROM SS_LM_DATA
WHERE CLOSE_TIME > DATEADD(day, -1, CAST(GETDATE() AS DATE)
Avatar billede Syska Mester
29. november 2011 - 13:10 #11
Hvis du har SSMS ... hvad output får du så ved følgende?

SELECT DATEADD(day, -1, CAST(GETDATE() AS DATE);

Og hvad datatype er CLOSE_TIME?
Avatar billede janus_007 Nybegynder
30. november 2011 - 00:33 #12
Date er først kommet i Sql 2008, måske er det fejlen?
Avatar billede Syska Mester
30. november 2011 - 00:45 #13
Well ... så burde det i hvert fald give en fejl.
Avatar billede arne_v Ekspert
30. november 2011 - 03:22 #14
Jeg ville nok lave den beregning i app kode og ikke i SQL.
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