webForumDet fria alternativet
Logga in / Bli medlem

BETWEEN på date-kolumner

Databaser & SQL

8 svar · 234 visningar · startad av sabbacus

Medlem sedan juli 2002630 inlägg
Trådstart#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

Medlem sedan juni 200032 967 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,

Medlem 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?

Medlem sedan juni 200032 967 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,

Medlem 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?

Medlem 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

Medlem 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.

Medlem sedan juni 200032 967 inlägg
#8

LarsG skrev:

Varken

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

för datum är enligt sql-standard.

Och B? :)

Mvh,

Medlem 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.

378 ms totalt · 4 externa anrop · v20260731065814-full.c32e866c
125 ms — deklarationer (db)
123 ms — hämta statistik (db)
126 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)