8 939 besökare online
858 143 medlemmar • 45 867 517 inlägg
Användarnamn 
Lösenord
Flashback Forum > Dator och IT > Systemutveckling > Databaser
Svara på ämne
Ämnesverktyg
hannastudent
Medlem
Hej,
jag håller på med en prototyp för ett bokningssystem och har kört fast totalt. Jag försöker skriva kod för att lägga till en dag på dagens datum, ändra tid till 8.00 och sedan kolla varannan timme fram till 16.00, sen göra om detta för varje dag. Detta ska synas i prototypen i form av att datumet stryks över om där inte finns några lediga tider.

Jag har tidigare postat på ett att forum och då fick jag följande kod:
CREATE TABLE #tmp (
Date DATETIME
)

INSERT INTO #tmp
SELECT DATEADD(hh, 8, DATEADD(d, 0, DATEDIFF(d, 0, GETDATE())))
UNION ALL SELECT DATEADD(hh, 10, DATEADD(d, 0, DATEDIFF(d, 0, GETDATE())))
UNION ALL SELECT DATEADD(hh, 12, DATEADD(d, 0, DATEDIFF(d, 0, GETDATE())))
GO

DECLARE @dt DATETIME
SET @dt = DATEADD(hh, 8, DATEADD(d, 0, DATEDIFF(d, 0, GETDATE())))

-- Method 1
INSERT INTO #tmp
SELECT MIN(v.Date)
FROM ( SELECT DATEADD(hh, number * 2, @dt) AS Date
FROM master.dbo.spt_values
WHERE [Type] = 'P' ) v
LEFT JOIN #tmp t
ON t.Date = v.Date
WHERE t.Date IS NULL
AND DATEPART(hh, v.Date) BETWEEN 8 AND 16


/*
-- Method 2
WHILE EXISTS (SELECT 1 FROM #tmp WHERE Date = @dt)
BEGIN
IF DATEPART(hh, @dt) = 16
SET @dt = DATEADD(hh, 16, @dt)
ELSE
SET @dt = DATEADD(hh, 2, @dt)
END

INSERT INTO #tmp
SELECT @dt
*/

SELECT * FROM #tmp
GO

DROP TABLE #tmp
GO

In your solution, you should also make sure the date column is indexed.

Förstår mig inte riktigt på vad alla delar han skrivit gör, behöver akut hjälp med detta har suttit i flera timmar men kommer ingenvart

/Hanna
 
Sane?
Medlem
Sane?s avatar
Har inte orkat sätta mig in i sql-koden, men ett generellt tips är att använda databasen för lagring och ha sådan logik som du pratar om i vb-kod.

Detta kommer sannolikt inte gillas av sql-rävarna i detta forum
 
kh31d4r
Medlem
kh31d4rs avatar
Citat:
Ursprungligen postat av Sane?
Har inte orkat sätta mig in i sql-koden, men ett generellt tips är att använda databasen för lagring och ha sådan logik som du pratar om i vb-kod.

Detta kommer sannolikt inte gillas av sql-rävarna i detta forum

så om du har en databas med 50 miljoner rader i så skulle du hellre göra en "SELECT * FROM fetejoinen" och skicka massa onödig data för att sedan i något äckligt högnivåspråk sitta och pilla för att få ut det du vill ha? istället för att skriva en SP på fyra rader som spar massvis med resurser?
 
Wobin
Medlem
Wobins avatar
Tror nog jag håller med Sane? här, lär väl bara ligga databasposter när rummet är bokat, och då är det väl bara att hämta ut dessa och sedan låta VB .Net sköta logiken att generera upp obokade tider istället för att låta SQL generera massa rader med skräpdata.

Givetvis ska man väl ha lite logik i SQL-frågan också så man inte hämtar ut data som inte behövs, men just biten att generera upp utfyllnadsdata känns lite sådär.


Edit: Skrev C# först :P
__________________
Jag är internet.
__________________
Senast redigerad av Wobin 2010-04-17 kl. 22:59.
 
Svara på ämne
Topp Dela »