webForumDet fria alternativet

Hitta ett ledigt datum i från och till kolumner

Databaser & SQL

16 svar · 413 visningar · startad av mattiasnordin

Medlem sedan maj 20012 080 inlägg
Frågan#1

Hej,
Jag behöver hjälp att konstruera en fråga som kontrollerar om en viss datumperiod är ledig i en kalender eller ej.

Tabellen ser ut som följande:

bokad_start | bokad_slut | bokad_av | osv...

bokad_start och bokad_slut innehåller datum och tid (2004-04-12 14:00).

Jag behöver en fråga som kontrollerar om det finns ledig tid i min kalender innan jag lägger in ny data.

Förstår någon vad jag menar? :q

Medlem sedan dec. 200012 464 inlägg
#2
select 1 from t
where <din-starttid> between bokad_start and bokad_slut
or <din-sluttid> between bokad_start and bokad_slut

Om du får någon post tillbaka så är det bokat.

Medlem sedan maj 20012 080 inlägg
#3

Det känns rätt, men jag får inte riktigt till det...

select 1 from T_bokad_av_användare WHERE 2003-07-11 14:46 BETWEEN bokad_start AND bokad_slut OR 2003-07-11 15:46 BETWEEN bokad_start AND bokad_slut 
--------------------------------------------------------------------------------

Microsoft JET Database Engine error '80040e14' 

Syntax error (missing operator) in query expression '2003-07-11 14:46 BETWEEN bokad_start AND bokad_slut OR 2003-07-11 15:46 BETWEEN bokad_start AND bokad_slut'. 

/script_booking/show_selected_product.asp, line 37

Båda bokad_start och bokad_slut är i textform i databasen. Ska jag ändra det till ett datum?

Är det ett syntaxfel?

Medlem sedan juni 200032 967 inlägg
#4

Du saknar apostrofer runt värdena, och, ja datumvärden skall alltid vara av rätt datatyp i tabellen.

Inte sätter du en klisterlapp som det står "strumpor" på på din kalsonglåda för att det var enklare att stava till? ;)

Medlem sedan maj 20012 080 inlägg
#5

;-)

Får inte riktigt till det. Får inte något felmeddelande men jag kan inte provocera fram en träff (dvs boka på ett redan bokat datum).

select 1 from T_bokad_av_användare WHERE #2003-03-11 14:46# BETWEEN bokad_start AND bokad_slut OR #2003-09-11 15:46# BETWEEN bokad_start AND bokad_slut

bokad_start och bokad_slut är nu i datumformat.

Vad kan jag göra för fel? I databasen finns det (bokad_start = 2003-04-05 12:00:00) (bokad_slut = 2003-04-06 14:00:00)

Medlem sedan maj 20012 080 inlägg
#6

Vad betyder SELECT 1 ?

Medlem sedan juni 200032 967 inlägg
#7

"Hämta siffran 1"

Godtyckligt värde alltså, det gäller ju bara att hämta en flagga någonting finns.

Mvh

Medlem sedan dec. 20003 887 inlägg
#8

Det är inget fel. Det finns nämligen ingen tid bokad innan 2003-03-11 och ingen tid efter 2003-09-11.

SELECT 1 FROM T_bokad_av_användare
WHERE [i]start[/i] BETWEEN bokad_start AND bokad_slut
  OR [i]stop[/i] BETWEEN bokad_start AND bokad_slut
  OR ([i]start[/i] < Min(bokad_start) AND [i]stop[/i] > Max(bokad_start))

SELECT 1 innebär att frågan returnerar en etta för varje träff.

Medlem sedan maj 20012 080 inlägg
#9

Vad göra för fel..?..

Medlem sedan maj 20012 080 inlägg
#10
	'kontrollerar om datumet är upptaget'
	sql = "select 1 from T_bokad_av_användare "
	sql = sql & " WHERE #" &sBookedFrom &"# BETWEEN bokad_start AND bokad_slut "
	sql = sql & " OR #" &sBookedTo &"# BETWEEN bokad_start AND bokad_slut "
	response.write sql &"<hr>"
	set rsTest = connect.execute(sql) %> 
	<%if rsTest.eof then%>
	<script>
	alert("test") 	
	</script>
	<% else %>
	TEST 2222222222222
	<% end if %>
Medlem sedan dec. 20003 887 inlägg
#11

Hänvisar till mitt svar om du missade det...

Medlem sedan maj 20012 080 inlägg
#12

Jag använder access 2002 som databas. Får nu detta fel... Tack för hjälpen alla!

SELECT 1 FROM T_bokad_av_användare WHERE start BETWEEN bokad_start AND bokad_slut OR stop BETWEEN bokad_start AND bokad_slut OR (start < Min(bokad_start) AND stop > Max(bokad_start))
--------------------------------------------------------------------------------
 
Microsoft JET Database Engine error '80040e14' 

Cannot have aggregate function in WHERE clause (start Between bokad_start And bokad_slut Or stop Between bokad_start And bokad_slut Or start<Min(bokad_start) And stop>Max(bokad_start)). 

/script_booking/show_selected_product.asp, line 36
Medlem sedan dec. 20003 887 inlägg
#13

Åh... tro om det här kan fungera lite bättre

SELECT 1 FROM T_bokad_av_användare
WHERE start BETWEEN bokad_start AND bokad_slut
  OR stop BETWEEN bokad_start AND bokad_slut
  OR (start <= (SELECT Min(bokad_start) FROM T_bokad_av_användare) AND stop >= (SELECT Max(bokad_slut) FROM T_bokad_av_användare))
Medlem sedan maj 20012 080 inlägg
#14

Ge inte upp nu Engine!

SELECT 1 FROM T_bokad_av_användare WHERE start BETWEEN bokad_start AND bokad_slut OR stop BETWEEN bokad_start AND bokad_slut OR (start <= (SELECT Min(bokad_start) FROM T_bokad_av_användare) AND stop >= (SELECT Max(bokad_slut) FROM T_bokad_av_användare)) 
--------------------------------------------------------------------------------

Microsoft JET Database Engine error '80040e10' 

No value given for one or more required parameters. 

/script_booking/show_selected_product.asp, line 41
Medlem sedan maj 20012 080 inlägg
#15

Sorry, glömde att byta ut start och stop...

Medlem sedan maj 20012 080 inlägg
#16

Det fungerar! Superbra! :-) 1000 tack Engine...!...

Medlem sedan dec. 20003 887 inlägg
#17

Trevligt, varsågod.

267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)