#sql #sql-server #date #datetime #stored-procedures
#sql #sql-сервер #Дата #дата-время #хранимые процедуры
Вопрос:
У меня есть таблица со столбцом « dateRec
«, отформатированным как datetime, и процедура выбора для извлечения данных из этой таблицы. Процедура имеет два входных параметра, rangeStart
rangeEnd
которые могут быть отформатированы либо как datetime, либо как nvarchar (что имеет смысл здесь).
Как я могу добиться того, чтобы я выбирал только записи, где dateRec находится между RangeStart и RangeEnd ?
Моя процедура (сокращенная) — просто для демонстрации того, что я ищу:
ALTER PROCEDURE [dbo].[FetchRequests]
@rangeStart datetime,
@rangeEnd datetime
AS
BEGIN
SET NOCOUNT ON;
SELECT logID,
flag,
reviewer,
dateRec
FROM LogRequests
WHERE dateRec >= rangeStart
AND dateRec <= rangeEnd
FOR XML PATH('requests'), ELEMENTS, TYPE, ROOT('ranks')
END
Большое спасибо за любую помощь в этом, Майк.
Комментарии:
1. что в этом плохого?
2. как говорит @Nithesh, есть ли ошибки в этом или это просто проверка кода?
3. Поскольку параметр
datetime
, если вы передаете NVARCHAR, он будет преобразован в datetime до запуска процедуры . Итак, в принципе, что не так с вашим существующим кодом?4. @Mike Вы неправильно использовали переменные, вам нужно добавить знак @. Пожалуйста, смотрите Мой ответ ниже.
5. Спасибо — так это действительно правильно? Я не ожидал, что смогу выбрать даты таким образом.
Ответ №1:
Вы можете использовать ключевое слово BETWEEN:
ALTER PROCEDURE [dbo].[FetchRequests]
@rangeStart datetime,
@rangeEnd datetime
AS
BEGIN
SET NOCOUNT ON;
SELECT logID,
flag,
reviewer,
dateRec
FROM LogRequests
WHERE dateRec BETWEEN @rangeStart AND @rangeEnd
FOR XML PATH('requests'), ELEMENTS, TYPE, ROOT('ranks')
END
Комментарии:
1. Спасибо за это! Будет ли это включать дату начала диапазона и дату окончания диапазона? Кроме того, в каком формате мне нужно будет передать параметры для этой процедуры? Будет ли работать что-то вроде 2014-01-31 или входные данные должны быть в определенном формате?
2. Yes BETWEEN возвращает TRUE, если значение test_expression больше или равно значению begin_expression и меньше или равно значению end_expression .
3. Большое спасибо — это здорово!
4. Я рад, что смог помочь.
5. Используйте функцию SELECT GETDATE(), чтобы определить формат даты и времени по умолчанию, настроенный для сервера.