Чтобы получить диапазон значений - PullRequest
1 голос
/ 31 марта 2009

Моя таблица с именем TimeList с 2 столбцами SlotID (int identity) и SlotTime (varchar) в базе данных выглядит следующим образом.

SlotID   SlotTime
1        8:00AM-8:15AM
2        8:15AM-8:30AM
3        8:30AM-8:45AM
4        8:45AM-9AM
5        9AM-9:30AM

также до 6:45 вечера - 7:00 вечера.

если я передаю 2 параметра starttime и endtime как 8:00 AM, а endtime - как 9 AM, я хочу получить первые 4 строки в приведенной выше таблице. Может ли кто-нибудь помочь иметь такую ​​хранимую процедуру.

Ответы [ 3 ]

2 голосов
/ 31 марта 2009

Можно ли изменить таблицу так, чтобы она выглядела следующим образом:

SlotID   SlotStart   SlotEnd
----------------------------
1        8:00am      8:15am
2        8:15am      8:30am
...

Если вы разделите время на отдельные столбцы, вам будет проще запрашивать диапазоны дат. Запрос будет выглядеть примерно так:

@StartTime = '8:00am'
@EndTime = '9:00am'

select SlotID, SlotStart, SlotEnd
from Slots
where SlotStart >= @StartTime
and SlotEnd <= @EndTime
1 голос
/ 31 марта 2009

Ваши данные не нормализованы должным образом, поэтому запрос будет затруднен. Поле должно содержать только одно значение, поэтому у вас должно быть время начала и окончания слота в отдельных полях:

SlotID   StartTime   EndTime
1        8:00AM      8:15AM
2        8:15AM      8:30AM
3        8:30AM      8:45AM
4        8:45AM      9:00AM
5        9:00AM      9:30AM

Это также позволяет вам использовать тип datetime для полей вместо текстового типа данных, чтобы вы могли легко запросить таблицу:

select SlotId, StartTime, EndTime
from TimeList
where StartTime >= '8:00AM' and EndTime <= '9:00AM'

При исходном дизайне таблицы вам придется использовать строковые операции для разделения значений в поле и преобразования значений, чтобы сделать их сопоставимыми. Если вы получите много данных в таблице, это снизит производительность, так как запрос не может использовать индексы.

0 голосов
/ 31 марта 2009

Проблема в том, что ваша таблица не нормализована. Пожалуйста, прочтите это на http://en.wikipedia.org/wiki/Database_normalization, это может значительно улучшить качество проектируемых вами систем.

В вашем текущем случае, пожалуйста, следуйте советам Энди и разделите SlotStart и SlotEnd. Ваш формат времени не очень хорош. Используйте формат DateTime (или любой другой тип, который ваша база данных предлагает вам в качестве своего типа времени) или числовой тип, например INT, для хранения ваших значений (например, 1800 вместо 18:00).

Тогда вы можете легко использовать

ВЫБРАТЬ ИЗ ВРЕМЕННОГО СПИСКА, ГДЕ SlotStart> = ... И SlotEnd <= ... </p>

и выберите из своего списка все, что вам нравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...