webForumDet fria alternativet

BETWEEN på date-kolumner

8 svar · 234 visningar · startad av sabbacus

sabbacusMedlem sedan juli 2002630 inlägg
#1

Tjipp.
Jag sitter med en databas och försöker ta reda på om ett datum är inom ett visst intervall. Har bestämt mig för att göra detta med BETWEEN (hojta om det finns något bättre sätt).

Dock får jag feta "data type mismatch in criteria expression" när jag kör min fråga.

lite förklaringar:
"fom", "tom" är av typen date
Jag vill alltså ha ut (i detta exempel) antalet rader där datumet 2002-01-01 är senare än "fom" men tidigare än "tom"

query
SELECT count(1) FROM bokningar WHERE '2002-01-01' BETWEEN fom AND tom

Någon som vet hur jag ska få det att fungera?
/Sabbacus

@ndersMedlem sedan juni 200032 969 inlägg
#2

Det borde fungera, men jag är osäker på två saker:

  1. Jag vet inte vad Access tycker om COUNT(1). Prova COUNT(*) istället.
  2. Möjligen måste du använda brädgård för att omsluta datumet.

Prova denna:

SELECT count(*) FROM bokningar WHERE #2002-01-01# BETWEEN fom AND tom

Mvh,

sabbacusMedlem sedan juli 2002630 inlägg
#3

SELECT count(*) FROM bokningar WHERE #2002-01-01# BETWEEN fom AND tom

Nu funkar det jättebäst. Tackar!
Access klarar också av count(1).
Men varför brädgårdar?

@ndersMedlem sedan juni 200032 969 inlägg
#4

Gamla versioner av Access (97 och tidigare) använder # för att omsluta datumvärden. Nyare tycker om apostrofer, men stödjer också # av bakåtkompatibilitetsskäl (phew, vilket ord. ;) ).

Red: Vad returnerar count(1)? Om du bara vill ha något, vad som helst tillbaka, så räcker det att bara fråga efter 1: SELECT 1 FROM ...

Mvh,

sabbacusMedlem sedan juli 2002630 inlägg
#5

Om jag nu minns rätt så returnerar count(1) antalet berörda rader i selectsatsen. Man kan om man vill köra count(id) om man har en tabell som heter så. count(1) är "universell" och kräver inte ett tabellnamn för att fungera.

Så tror jag att det är iaf. rätta mig om jag har fel. Har också en teori om att # inte är en del av SQL-specen utan att det är en MS-uppfinning. korrekt?

sabbacusMedlem sedan juli 2002630 inlägg
#6

Självklart ska det stå
"Man kan om man vill köra count(id) om man har en KOLUMN som heter så."
och inget annat.
/S

LarsGMedlem sedan dec. 200012 464 inlägg
#7

count(1) skall vara samma som count(*) enligt sqlstandard.

count(id) innebär att man inte räknar de poster där id är null.

Varken

#yyyy-mm-dd# eller
'yyyy-mm-dd'

för datum är enligt sql-standard.

@ndersMedlem sedan juni 200032 969 inlägg
#8

LarsG skrev:

Varken

#yyyy-mm-dd# eller
'yyyy-mm-dd'

för datum är enligt sql-standard.

Och B? :)

Mvh,

LarsGMedlem sedan dec. 200012 464 inlägg
#9

Okej då.

date '2002-10-22'

så skall ett datum se ut. Standarden har olika datatyper för date/time/timestamp där timestamp motsvarar det som de flesta dbms kallar för date eller datetime.

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)