|
| sql og noget måske avanceret datoværk Fra : Chrisser |
Dato : 03-09-03 12:54 |
|
Hej
Jeg har indtil videre:
sql = " select sum(overslag) as akkBelob from rekvstam where udfoertaf=" &
FStringSql(initial) "
Men jeg skal have den kogt længere ned...
Jeg har en variabel der indeholder dato i formatet: '09-03-2003' ( dags dato
i dette tilfælde, men det vil variere)
Jeg skal have fat i de poster hvor feltet "opretdato" ligger i samme måned
som min datovariabel. Altså i ovenstående tilfælde alle de hvor
oprettelsesdatoen er i december måned ( samme år ! )
Er der en smart måde at gøre det på i MSSql ?
Chrisser
| |
Kristian Damm Jensen (03-09-2003)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 03-09-03 13:45 |
|
"Chrisser" <cbj@egdatainform.dk> skrev i en meddelelse
news:bj4kn0$26j$1@sunsite.dk...
> Hej
> Jeg har indtil videre:
> sql = " select sum(overslag) as akkBelob from rekvstam where udfoertaf=" &
> FStringSql(initial) "
> Men jeg skal have den kogt længere ned...
> Jeg har en variabel der indeholder dato i formatet: '09-03-2003' ( dags
dato
> i dette tilfælde, men det vil variere)
> Jeg skal have fat i de poster hvor feltet "opretdato" ligger i samme måned
> som min datovariabel. Altså i ovenstående tilfælde alle de hvor
> oprettelsesdatoen er i december måned ( samme år ! )
>
> Er der en smart måde at gøre det på i MSSql ?
Jeg er ikke helt stiv i MS-SQL, men er der ikke en funktion, der hedder
datepart? Den burde kunne levere månedens nummer til dig.
| |
Chrisser (03-09-2003)
| Kommentar Fra : Chrisser |
Dato : 03-09-03 14:16 |
|
Kristian Damm Jensen wrote:
>> Er der en smart måde at gøre det på i MSSql ?
>
> Jeg er ikke helt stiv i MS-SQL, men er der ikke en funktion, der
> hedder datepart? Den burde kunne levere månedens nummer til dig.
Jo
- dejligt med nogle der kan tænke kreativt når man selv er kørt flad
Den sidste del af min sql kom til at se sådan ud:
"... datepart("mm",OpretDato) = datepart("mm",'09-03-2003')
and datepart("yyyy",OpretDato) = datepart("yyyy",'09-03-2003') "
Hvor der så skal indsættes min variabel i stedet for de to datoer.
Så er jeg, så vidt jeg kan se, helt ud over at skulle tænke på hvor mange
dage der er i en given måned osv, er det ikke rigtigt ?
Chrisser
| |
Peter Lykkegaard (03-09-2003)
| Kommentar Fra : Peter Lykkegaard |
Dato : 03-09-03 14:55 |
|
"Chrisser" <cbj@egdatainform.dk> wrote in message
news:bj4kn0$26j$1@sunsite.dk...
> Jeg har en variabel der indeholder dato i formatet: '09-03-2003' ( dags
dato
> i dette tilfælde, men det vil variere)
> Jeg skal have fat i de poster hvor feltet "opretdato" ligger i samme måned
> som min datovariabel.
Du kan også bruge Month (i stedet for datepart)
Overvej på hvilket niveau du omsætter din datovariabel til måneds nummer
Om det skal være på MSSQL eller i dit script
En måde at teste tingene kan være at lave en select i din QA og derved "ser"
hvordan din tekst (datovariabel) bliver omsat til datetime formattet som
MSSQL bruger
mvh/Peter Lykkegaard
| |
Chrisser (03-09-2003)
| Kommentar Fra : Chrisser |
Dato : 03-09-03 15:00 |
|
Peter Lykkegaard wrote:
> Du kan også bruge Month (i stedet for datepart)
Ja det kunne jeg selvfølgelig
> Overvej på hvilket niveau du omsætter din datovariabel til måneds
> nummer
> Om det skal være på MSSQL eller i dit script
Jeg vil helst lade MSSQL tage sig af det ( det blev også resultatet )
> En måde at teste tingene kan være at lave en select i din QA og
> derved "ser" hvordan din tekst (datovariabel) bliver omsat til
> datetime formattet som MSSQL bruger
Nu har jeg en funktion til formatteringen op mod MSSQL så det var ikke der
hunden lå begravet - jeg kunne bare ikke lige se hvad jeg skulle finde på
Men jeg brugte QA til at teste output, jeg ved ikke hvad jeg skulle gøre
uden den
Chrisser
| |
Peter Lykkegaard (03-09-2003)
| Kommentar Fra : Peter Lykkegaard |
Dato : 03-09-03 15:43 |
|
"Chrisser" <cbj@egdatainform.dk> wrote in message
news:bj4s2r$fbp$1@sunsite.dk...
> Peter Lykkegaard wrote:
> > Du kan også bruge Month (i stedet for datepart)
>
> Ja det kunne jeg selvfølgelig
>
Hæ, eller den alt for lidt brugte DateDiff
Fx DateDiff(mm, GetDate(), '2003-09-03')
Den giver dig 0 hvis du er i indeværende år/måned eller en negativ/positiv
værdi ved fx
DateDiff(mm, GetDate(), '2002-09-03')
DateDiff(mm, GetDate(), '2004-09-03')
Så slipper du for at checke på både og måned i din where clause
Det er jo beregnede værdier og kan give lidt tab mht performance
mvh/Peter Lykkegaard
| |
Chrisser (04-09-2003)
| Kommentar Fra : Chrisser |
Dato : 04-09-03 07:10 |
|
Peter Lykkegaard wrote:
> Fx DateDiff(mm, GetDate(), '2003-09-03')
>
> Den giver dig 0 hvis du er i indeværende år/måned eller en
> negativ/positiv værdi ved fx
>
> DateDiff(mm, GetDate(), '2002-09-03')
> DateDiff(mm, GetDate(), '2004-09-03')
>
> Så slipper du for at checke på både og måned i din where clause
> Det er jo beregnede værdier og kan give lidt tab mht performance
Den vil jeg da lige lege lidt med, jo simplere jo bedre
Chrisser
| |
Chrisser (04-09-2003)
| Kommentar Fra : Chrisser |
Dato : 04-09-03 13:41 |
|
Peter Lykkegaard wrote:
> Hæ, eller den alt for lidt brugte DateDiff
>
> Fx DateDiff(mm, GetDate(), '2003-09-03')
>
> Den giver dig 0 hvis du er i indeværende år/måned eller en
> negativ/positiv værdi ved fx
>
> DateDiff(mm, GetDate(), '2002-09-03')
> DateDiff(mm, GetDate(), '2004-09-03')
>
> Så slipper du for at checke på både og måned i din where clause
> Det er jo beregnede værdier og kan give lidt tab mht performance
Det blev til:
"select sum(overslag) as akkBelob from rekvstam where initial='cbj'
and DateDiff("mm", OpretDato, '09-03-2004') = 0"
- jeg har testet lidt frem og tilbage og det lader til at ovenstående både
tester år og måned, altså at første argument angiver hvor "langt ned" den
skal gå i tjekket ( dårligt formuleret ) frem for at den kun tester på måned
?
Det vidste jeg ikke - jeg kan kun sige at det er smart
Chrisser
| |
Peter Lykkegaard (04-09-2003)
| Kommentar Fra : Peter Lykkegaard |
Dato : 04-09-03 16:39 |
|
"Chrisser" <cbj@egdatainform.dk> wrote in message
news:bj7brb$qr9$1@sunsite.dk...
> Peter Lykkegaard wrote:
> > Hæ, eller den alt for lidt brugte DateDiff
> >
> > Fx DateDiff(mm, GetDate(), '2003-09-03')
>
> Det vidste jeg ikke - jeg kan kun sige at det er smart
>
Jeg sagde jo at den blev brugt alt for lidt
Jeg har selv løst nogle problemer hvor en post blev sat ind i en table for
derefter ligge i x antal minutter hvor den så bliver frigivet
x er variabel efter forsk kriterier og poster bliver sat ind løbende
Her kommer DateDiff "to the rescue"
mvh/Peter Lykkegaard
| |
|
|