Я пытаюсь создать процедуру проверки годовых дат. Дата хранится один раз в BD, но в календаре моей winform он отображается ежегодно (я использую ежегодные полужирные даты на C#). Итак, что я хочу сделать с запросом, это проверить месяц и день, как дата, хранящаяся в таблице, но не работает. Это мой запрос:Процедура проверки годовой даты
SELECT IdCalendar,
Description,
DateCalendar,
Annualy
FROM Calendar
WHERE
(DATEPART(MONTH,DateCalendar) like DATEPART(MONTH,@DateCalendar)) AND
(DATEPART(DAY,DateCalendar) like DATEPART(DAY,@DateCalendar))
И, например, мой хранятся DateCalendar является '2015-12-04', и я мой paramenter @DateCalendar является '2016-12-04'. Любая идея о том, как сделать лучший запрос?
EDIT
Запрос не имеет какой-либо ошибки или предупреждения. Просто возвращает 0 строк. И мой DateCalendar хранится как DateTime.
СП:
CREATE PROC [dbo].[usp_app_Calendar_Search]
@DateCalendar DATETIME,
@Result SMALLINT OUTPUT,
@Message VARCHAR(1000) OUTPUT
AS
BEGIN
DECLARE @vResult SMALLINT, @vMessage VARCHAR(1000)
SELECT @vResult = 0, @vMessage = ''
BEGIN TRY
IF EXISTS (SELECT * FROM Calendar WHERE DateCalendar = @DateCalendar)
BEGIN
IF(@DateCalendar = 0) SET @DateCalendar = NULL
SELECT IdCalendar,
Description,
DateCalendar,
Annualy
FROM Calendar
WHERE
(DATEPART(MONTH,DateCalendar) like DATEPART(MONTH,@DateCalendar)) AND
(DATEPART(DAY,DateCalendar) like DATEPART(DAY,@DateCalendar))
SET @vResult = 1
SET @vMessage = 'Done'
END
ELSE BEGIN
SET @vResult = 0
SET @vMessage = 'Error.'
END
END TRY
BEGIN CATCH
SET @vResult = -1
SET @vMessage = 'Error: ' + ERROR_MESSAGE() + ' Line: ' + CAST(ERROR_LINE() AS VARCHAR)
END CATCH
SELECT @Result = @vResult, @Message = @vMessage
END
Спасибо заранее.
'WHERE DATEPART (МЕСЯЦ, DateCalendar) = DATEPART (МЕСЯЦ, @ DateCalendar) И DATEPART (DAY, DateCalendar) = DATEPART (DAY , @ DateCalendar) ' – lad2025
Я пробовал с этим, но не работает @ lad2025 – Coeus
Будь конкретным. Плохие результаты/Нет результатов вообще/ошибка/предупреждение? Как вы храните свой 'DateCalendar' DATE/DATETIME/VARCHAR? – lad2025