你一定要重新設計數據庫。將多個值放入單個列中是違反規範化規則的重大違規行爲,並會導致很多令人頭疼的事情。單列應始終保存一條信息。
您還應該使用正確的數據類型。不要把時間放在一個字符串中,因爲你最終可能會以「foo」作爲時間,然後你會怎麼做?
相反,你可能想要的是:
CREATE TABLE Restaurants
(
restaurant_id INT NOT NULL,
restaurant_name VARCHAR(40) NOT NULL,
CONSTRAINT PK_Restaurants PRIMARY KEY CLUSTERED (restaurant_id)
)
CREATE TABLE Restaurant_Hours
(
restaurant_id INT NOT NULL,
hours_id INT NOT NULL,
day_of_week SMALLINT NOT NULL,
start_time TIME NOT NULL, -- Depends on your RDBMS and which date/time datatypes it supports
end_time TIME NOT NULL,
CONSTRAINT PK_Restaurant_Hours PRIMARY KEY CLUSTERED (restaurant_id, hours_id)
)
然後,您可以很容易地檢查餐館開在給定時間:
SELECT
R.restaurant_id,
R.restaurant_name
FROM
Restaurants R
WHERE
EXISTS
(
SELECT *
FROM
Restaurant_Hours RH
WHERE
RH.restaurant_id = R.restaurant_id AND
RH.start_time <= @time AND
RH.end_time >= @time AND
RH.day_of_week = @day_of_week
)
如果你有一個跨越午夜你將一個時隙需要兩行 - 第一天一個,午夜一個 - 第二天「x」。另外,請記住從GUI使用時要記住時區。
你的方法是不是很好,數據庫將是非常困難的進一步查詢。看到羅曼的答案 - 更好的解決方案。此外,我建議你reead關於數據庫規範化,就像維基http://zh.wikipedia.org/wiki/Database_normalization – 2010-06-18 14:26:19