webForumDet fria alternativet

Hjälp med konvertering för datumurvalet

Databaser & SQL

4 svar · 201 visningar · startad av wazid

Medlem sedan maj 2001156 inlägg
Frågan#1

Hejsan

Jag har sutit och letat i forumet, och kommit en bit på väg i min select-sats.
Dock får jag inte kläm på det sista, som handlar om ett urval med konvertering.

Jag önskar lista ut en topplista från en tabbel.
Jag vill få ut de 30 mest förekommande datumen, och en summering per per dag för dessa.
Detta fixade jag.
Men jag vill även kunna lägga in ett urval för mellan vilka datum som sökningen ska ske.

Så här ser den fungerande koden ut utan detta urval :

SELECT     TOP 30 CAST(Datum AS varchar(11)) AS Dag, COUNT(*) AS visningar
FROM         Visastatistik
GROUP BY CAST(Datum AS varchar(11))
ORDER BY COUNT(*) DESC

Men så fort jag blandar in Where Datum between xxxx-xx-xx AND yyyy-yy-yy så får jag felmeddelande.
Kolumnen Datum är av typen Smalldatetime.
Databasen är SQL 2000.

MvH

Daivd

Medlem sedan juni 200032 967 inlägg
#2

Vad får du för felmeddelande? Det ska gå alldeles utmärkt att begränsa urvalet. Hur ser frågan ut när du har med between?

(Du borde heller inte casta till varchar, det finns många olika datumformat du kan konvertera till i SQL-frågan, men det är en bisak i sammanhanget.)

Medlem sedan maj 2001156 inlägg
#3

Hej @nders

Om jag tex kör så här :

SELECT     TOP 30 CAST(Datum AS varchar(11)) AS Dag, COUNT(*) AS visningar
FROM         Visastatistik
WHERE     (Datum BETWEEN 2003 - 05 - 01 AND 2003 - 07 - 01)
GROUP BY CAST(Datum AS varchar(11))
ORDER BY COUNT(*) DESC

Så får jag inget felmeddande, men jag får inte ut några värden heller. Resultatet blir tomt...
Jag tar gärna emot tips på alternativ till Cast.

MvH

David

Medlem sedan mars 20034 471 inlägg
#4

Om Datum är en VARCHAR, så är det alltså ett textformat. Funkar between verkligen på text? :q

Medlem sedan juni 200032 967 inlägg
#5

Så där kan du inte skriva datum. Datum skall ha apostrofer runt sig.

WHERE     (Datum BETWEEN '2003-05- 01' AND '2003-07-01')
GROUP BY CAST(Datum AS varchar(11))

Det du hade skrivit var

WHERE     (Datum BETWEEN 1997 AND 1995)
GROUP BY CAST(Datum AS varchar(11))

, och det är ju inte det du ville?

Mvh

262 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)