您肯定要重新设计数据库。像这样将多个值放到单个列中,这严重违反了规范化规则,并且在以后会引起很多麻烦。单个列应始终包含单个信息。
您还应该使用适当的数据类型。不要将时间放在字符串中,因为您可能会以“ 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使用时,请记住要牢记时区。