/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Hjælp til en CASE ORDER BY funktion i en S~
Fra : OZ


Dato : 26-04-02 14:52

Hej NG

Jeg sidder og arbejder med en SP hvor jeg giver brugeren mulighed for at
sortere et resultat vha en parameter sendt til en SP.

Problemet er at hvis jeg sender 3, 5, 7, 9, 11 afsted til min SP, så skriver
den:
"The conversion of a char data type to a datetime data type resulted in an
out-of-range datetime value."

Men det er jo ikke det jeg beder den om i min case eller er det? For mig ser
ud som om den chekker 1 selvom jeg beder om et andet tal.

ORDER BY
CASE
WHEN @_orderByClause = '1' THEN CONVERT(datetime(8),MyDate)
WHEN @_orderByClause = '3' THEN CONVERT(varchar(50),BirthDate)
WHEN @_orderByClause = '5' THEN CONVERT(varchar(50),Sex)
WHEN @_orderByClause = '7' THEN CONVERT(varchar(50),Height)
WHEN @_orderByClause = '9' THEN CONVERT(varchar(50),Father)
WHEN @_orderByClause = '11' THEN CONVERT(varchar(50),CustomerName)
END DESC

Jeg har så forsøgt at converte Mydate til VarChar men så sorterer den jo
ikke på dato format men efter tallene og det er jo heller ikke meningen. Men
så virker 3, 5, 7, 9 og 11 hmmm....

Hvad gør jeg forkert???

Håber at der er nogen der kan hjælpe mig med at gennemskue det her.

På forhånd tak

Oz







 
 
Sune Hansen (26-04-2002)
Kommentar
Fra : Sune Hansen


Dato : 26-04-02 18:18

Hejsa,

Når man anvender en CASE i en ORDER BY skal alle udfald være at samme
datatype. Linien:

WHEN @_orderByClause = '1' THEN CONVERT(datetime(8),MyDate)

skal derfor rettes til:

WHEN @_orderByClause = '1' THEN CONVERT(VARCHAR(50),MyDate).

Det skulle løse problemet

- Sune
http://www.sqljoint.com - artikler og tips om SQL Server på dansk.


"OZ" <no_spam_gonzo@strike-team.com> wrote in message
news:aablqt$pb$1@sunsite.dk...
> Hej NG
>
> Jeg sidder og arbejder med en SP hvor jeg giver brugeren mulighed for at
> sortere et resultat vha en parameter sendt til en SP.
>
> Problemet er at hvis jeg sender 3, 5, 7, 9, 11 afsted til min SP, så
skriver
> den:
> "The conversion of a char data type to a datetime data type resulted in an
> out-of-range datetime value."
>
> Men det er jo ikke det jeg beder den om i min case eller er det? For mig
ser
> ud som om den chekker 1 selvom jeg beder om et andet tal.
>
> ORDER BY
> CASE
> WHEN @_orderByClause = '1' THEN CONVERT(datetime(8),MyDate)
> WHEN @_orderByClause = '3' THEN CONVERT(varchar(50),BirthDate)
> WHEN @_orderByClause = '5' THEN CONVERT(varchar(50),Sex)
> WHEN @_orderByClause = '7' THEN CONVERT(varchar(50),Height)
> WHEN @_orderByClause = '9' THEN CONVERT(varchar(50),Father)
> WHEN @_orderByClause = '11' THEN CONVERT(varchar(50),CustomerName)
> END DESC
>
> Jeg har så forsøgt at converte Mydate til VarChar men så sorterer den jo
> ikke på dato format men efter tallene og det er jo heller ikke meningen.
Men
> så virker 3, 5, 7, 9 og 11 hmmm....
>
> Hvad gør jeg forkert???
>
> Håber at der er nogen der kan hjælpe mig med at gennemskue det her.
>
> På forhånd tak
>
> Oz
>
>
>
>
>
>



OZ (26-04-2002)
Kommentar
Fra : OZ


Dato : 26-04-02 18:35


"Sune Hansen" <sunedh@hotmail.com> skrev i en meddelelse
news:3cc98bd2$0$11911$edfadb0f@dspool01.news.tele.dk...
> Hejsa,
>
> Når man anvender en CASE i en ORDER BY skal alle udfald være at samme
> datatype. Linien:
>
> WHEN @_orderByClause = '1' THEN CONVERT(datetime(8),MyDate)
>
> skal derfor rettes til:
>
> WHEN @_orderByClause = '1' THEN CONVERT(VARCHAR(50),MyDate).
>
> Det skulle løse problemet


Hej Sune

Nej ikke rigtigt, fordi den så ikke sorterer korrekt på dato, den vil her
tage og sortere det som en streng hvilket ikke er meningen, den skulle jo
netop sortere det som en dato.....

Kan man på en eller anden smart måde gøre det om?

Man kunne jo selvfølgelig lave en case til DateTime og en til VarChar, men
er det ikke også lidt meget og gøre ud af det???

Oz



Sune Hansen (26-04-2002)
Kommentar
Fra : Sune Hansen


Dato : 26-04-02 19:21

Hejsa,

Hovsa, det har du ret i, fejlen forsvinder, men resultatet er ikke rigtigt.
Du er selv lidt inde på det, og jeg må tilstå at jeg ikke har testet det
100%, men skulle følgende ikke kunne gøre det:

ORDER BY
CASE
WHEN @_orderByClause = '1' THEN ''
WHEN @_orderByClause = '3' THEN CONVERT(varchar(50),BirthDate)
WHEN @_orderByClause = '5' THEN CONVERT(varchar(50),Sex)
WHEN @_orderByClause = '7' THEN CONVERT(varchar(50),Height)
WHEN @_orderByClause = '9' THEN CONVERT(varchar(50),Father)
WHEN @_orderByClause = '11' THEN CONVERT(varchar(50),CustomerName)
END,
CASE WHEN @_orderByClause = '1' THEN Mydate
ELSE CONVERT(DATETIME, '1.1.2000')
END

Nu sorteres der i virkeligheden på to kolonner i stedet for en. Afhængigt af
@_orderByClause er den ene kolonne dog altid en konstant.

- Sune

"OZ" <no_spam_gonzo@strike-team.com> wrote in message
news:aac2tj$g4o$1@sunsite.dk...
>
> "Sune Hansen" <sunedh@hotmail.com> skrev i en meddelelse
> news:3cc98bd2$0$11911$edfadb0f@dspool01.news.tele.dk...
> > Hejsa,
> >
> > Når man anvender en CASE i en ORDER BY skal alle udfald være at samme
> > datatype. Linien:
> >
> > WHEN @_orderByClause = '1' THEN CONVERT(datetime(8),MyDate)
> >
> > skal derfor rettes til:
> >
> > WHEN @_orderByClause = '1' THEN CONVERT(VARCHAR(50),MyDate).
> >
> > Det skulle løse problemet
>
>
> Hej Sune
>
> Nej ikke rigtigt, fordi den så ikke sorterer korrekt på dato, den vil her
> tage og sortere det som en streng hvilket ikke er meningen, den skulle jo
> netop sortere det som en dato.....
>
> Kan man på en eller anden smart måde gøre det om?
>
> Man kunne jo selvfølgelig lave en case til DateTime og en til VarChar, men
> er det ikke også lidt meget og gøre ud af det???
>
> Oz
>
>



OZ (26-04-2002)
Kommentar
Fra : OZ


Dato : 26-04-02 19:31


"Sune Hansen" <sunedh@hotmail.com> skrev:

> Hovsa, det har du ret i, fejlen forsvinder, men resultatet er ikke
rigtigt.
> Du er selv lidt inde på det, og jeg må tilstå at jeg ikke har testet det
> 100%, men skulle følgende ikke kunne gøre det:
>
> ORDER BY
> CASE
> WHEN @_orderByClause = '1' THEN ''
> WHEN @_orderByClause = '3' THEN CONVERT(varchar(50),BirthDate)
> WHEN @_orderByClause = '5' THEN CONVERT(varchar(50),Sex)
> WHEN @_orderByClause = '7' THEN CONVERT(varchar(50),Height)
> WHEN @_orderByClause = '9' THEN CONVERT(varchar(50),Father)
> WHEN @_orderByClause = '11' THEN CONVERT(varchar(50),CustomerName)
> END,
> CASE WHEN @_orderByClause = '1' THEN Mydate
> ELSE CONVERT(DATETIME, '1.1.2000')
> END
>
> Nu sorteres der i virkeligheden på to kolonner i stedet for en. Afhængigt
af
> @_orderByClause er den ene kolonne dog altid en konstant.

Hej Sune

Det ser spændende ud =) Jeg vil prøve og se om det virker efter hensigten.

Tak

Hilsen Oz



OZ (26-04-2002)
Kommentar
Fra : OZ


Dato : 26-04-02 21:05


"Sune Hansen" <sunedh@hotmail.com> skrev:

> Hovsa, det har du ret i, fejlen forsvinder, men resultatet er ikke
rigtigt.
> Du er selv lidt inde på det, og jeg må tilstå at jeg ikke har testet det
> 100%, men skulle følgende ikke kunne gøre det:
>
> ORDER BY
> CASE
> WHEN @_orderByClause = '1' THEN ''
> WHEN @_orderByClause = '3' THEN CONVERT(varchar(50),BirthDate)
> WHEN @_orderByClause = '5' THEN CONVERT(varchar(50),Sex)
> WHEN @_orderByClause = '7' THEN CONVERT(varchar(50),Height)
> WHEN @_orderByClause = '9' THEN CONVERT(varchar(50),Father)
> WHEN @_orderByClause = '11' THEN CONVERT(varchar(50),CustomerName)
> END,
> CASE WHEN @_orderByClause = '1' THEN Mydate
> ELSE CONVERT(DATETIME, '1.1.2000')
> END
>
> Nu sorteres der i virkeligheden på to kolonner i stedet for en. Afhængigt
af
> @_orderByClause er den ene kolonne dog altid en konstant.


En anden måske nemmere løsning kunne vel egentlig også være at omskrive
MyDate til yyyy-mm-dd med denne sætning CONVERT(varchar(50),MyDate,121), så
behøver jeg jo ikke at lave flere cases.

Oz




Sune Hansen (27-04-2002)
Kommentar
Fra : Sune Hansen


Dato : 27-04-02 15:42

Det lyder da i virkeligheden som den bedst løsning

- Sune

>
> En anden måske nemmere løsning kunne vel egentlig også være at omskrive
> MyDate til yyyy-mm-dd med denne sætning CONVERT(varchar(50),MyDate,121),

> behøver jeg jo ikke at lave flere cases.
>
> Oz
>
>
>



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408526
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste