Извините, Это мое приложение:SQL Между день и месяц (Нет год), связанных с Reaccurrance
дБ Конструкция:
Таким образом, правило когда я повторяюсь, поэтому я не вижу год только месяц и день. До сих пор это мой запрос, но когда я пытаюсь, он все еще не удалось, когда дата начала в декабре и дата окончания в январе следующего года ...
ALTER PROC [dbo].[uspPFS_HolidayListWithDateOrWithUnionReaccurrance] (
@p_sKeyword VARCHAR(255) = NULL
,@p_dtStartHolidayDateFrom DATETIME = NULL
,@p_dtEndHolidayDateTo DATETIME = NULL
)
AS
BEGIN
SET NOCOUNT ON;
SELECT [COM_HOLIDAY_ID]
,[RECURRANCE]
,[START_HOLIDAY_DATE]
,[END_HOLIDAY_DATE]
,[HOLIDAY_NAME]
,[HOLIDAY_DESC]
,[CREATE_BY_USER_ID]
,[UPDATE_BY_USER_ID]
,[CREATE_DATE]
,[UPDATE_DATE]
FROM [PFS_HOLIDAY] WITH (NOLOCK)
WHERE (
@p_sKeyword IS NULL
OR [HOLIDAY_NAME] LIKE '%' + @p_sKeyword + '%'
OR [HOLIDAY_DESC] LIKE '%' + @p_sKeyword + '%'
)
AND (
@p_dtStartHolidayDateFrom IS NULL
OR @p_dtStartHolidayDateFrom BETWEEN [START_HOLIDAY_DATE]
AND [END_HOLIDAY_DATE]
)
UNION
SELECT [COM_HOLIDAY_ID]
,[RECURRANCE]
,[START_HOLIDAY_DATE]
,[END_HOLIDAY_DATE]
,[HOLIDAY_NAME]
,[HOLIDAY_DESC]
,[CREATE_BY_USER_ID]
,[UPDATE_BY_USER_ID]
,[CREATE_DATE]
,[UPDATE_DATE]
FROM [PFS_HOLIDAY] WITH (NOLOCK)
WHERE (
@p_sKeyword IS NULL
OR [HOLIDAY_NAME] LIKE '%' + @p_sKeyword + '%'
OR [HOLIDAY_DESC] LIKE '%' + @p_sKeyword + '%'
)
AND (
@p_dtEndHolidayDateTo IS NULL
OR @p_dtEndHolidayDateTo BETWEEN [START_HOLIDAY_DATE]
AND [END_HOLIDAY_DATE]
)
UNION
SELECT [COM_HOLIDAY_ID]
,[RECURRANCE]
,[START_HOLIDAY_DATE]
,[END_HOLIDAY_DATE]
,[HOLIDAY_NAME]
,[HOLIDAY_DESC]
,[CREATE_BY_USER_ID]
,[UPDATE_BY_USER_ID]
,[CREATE_DATE]
,[UPDATE_DATE]
FROM [PFS_HOLIDAY] WITH (NOLOCK)
WHERE (
@p_sKeyword IS NULL
OR [HOLIDAY_NAME] LIKE '%' + @p_sKeyword + '%'
OR [HOLIDAY_DESC] LIKE '%' + @p_sKeyword + '%'
)
AND (
@p_dtStartHolidayDateFrom IS NULL
OR [START_HOLIDAY_DATE] >= @p_dtStartHolidayDateFrom
)
AND (
@p_dtEndHolidayDateTo IS NULL
OR [END_HOLIDAY_DATE] < DATEADD(DAY, 1, @p_dtEndHolidayDateTo)
)
UNION
SELECT [COM_HOLIDAY_ID]
,[RECURRANCE]
,[START_HOLIDAY_DATE]
,[END_HOLIDAY_DATE]
,[HOLIDAY_NAME]
,[HOLIDAY_DESC]
,[CREATE_BY_USER_ID]
,[UPDATE_BY_USER_ID]
,[CREATE_DATE]
,[UPDATE_DATE]
FROM [PFS_HOLIDAY] WITH (NOLOCK)
WHERE RECURRANCE = 1
AND (
@p_dtStartHolidayDateFrom IS NULL
OR @p_dtStartHolidayDateFrom BETWEEN CAST(CONVERT(VARCHAR(10), DATEPART(yyyy, @p_dtStartHolidayDateFrom)) + '-' + CONVERT(VARCHAR(10), DATEPART(mm, START_HOLIDAY_DATE)) + '-' + CONVERT(VARCHAR(10), DATEPART(dd, START_HOLIDAY_DATE)) AS DATETIME)
AND DATEADD(DAY, 1, CAST(CONVERT(VARCHAR(10), DATEPART(yyyy, @p_dtStartHolidayDateFrom)) + '-' + CONVERT(VARCHAR(10), DATEPART(mm, END_HOLIDAY_DATE)) + '-' + CONVERT(VARCHAR(10), DATEPART(dd, END_HOLIDAY_DATE)) AS DATETIME))
)
AND (
@p_sKeyword IS NULL
OR [HOLIDAY_NAME] LIKE '%' + @p_sKeyword + '%'
OR [HOLIDAY_DESC] LIKE '%' + @p_sKeyword + '%'
)
UNION
SELECT [COM_HOLIDAY_ID]
,[RECURRANCE]
,[START_HOLIDAY_DATE]
,[END_HOLIDAY_DATE]
,[HOLIDAY_NAME]
,[HOLIDAY_DESC]
,[CREATE_BY_USER_ID]
,[UPDATE_BY_USER_ID]
,[CREATE_DATE]
,[UPDATE_DATE]
FROM [PFS_HOLIDAY] WITH (NOLOCK)
WHERE RECURRANCE = 1
AND (
@p_dtEndHolidayDateTo IS NULL
OR @p_dtEndHolidayDateTo BETWEEN CAST(CONVERT(VARCHAR(10), DATEPART(yyyy, @p_dtEndHolidayDateTo)) + '-' + CONVERT(VARCHAR(10), DATEPART(mm, START_HOLIDAY_DATE)) + '-' + CONVERT(VARCHAR(10), DATEPART(dd, START_HOLIDAY_DATE)) AS DATETIME)
AND DATEADD(DAY, 1, CAST(CONVERT(VARCHAR(10), DATEPART(yyyy, @p_dtEndHolidayDateTo)) + '-' + CONVERT(VARCHAR(10), DATEPART(mm, END_HOLIDAY_DATE)) + '-' + CONVERT(VARCHAR(10), DATEPART(dd, END_HOLIDAY_DATE)) AS DATETIME))
)
AND (
@p_sKeyword IS NULL
OR [HOLIDAY_NAME] LIKE '%' + @p_sKeyword + '%'
OR [HOLIDAY_DESC] LIKE '%' + @p_sKeyword + '%'
)
UNION
SELECT [COM_HOLIDAY_ID]
,[RECURRANCE]
,[START_HOLIDAY_DATE]
,[END_HOLIDAY_DATE]
,[HOLIDAY_NAME]
,[HOLIDAY_DESC]
,[CREATE_BY_USER_ID]
,[UPDATE_BY_USER_ID]
,[CREATE_DATE]
,[UPDATE_DATE]
FROM [PFS_HOLIDAY] WITH (NOLOCK)
WHERE RECURRANCE = 1
AND (
@p_sKeyword IS NULL
OR [HOLIDAY_NAME] LIKE '%' + @p_sKeyword + '%'
OR [HOLIDAY_DESC] LIKE '%' + @p_sKeyword + '%'
)
AND (
@p_dtStartHolidayDateFrom IS NULL
OR CAST(CONVERT(VARCHAR(10), DATEPART(yyyy, @p_dtStartHolidayDateFrom)) + '-' + CONVERT(VARCHAR(10), DATEPART(mm, START_HOLIDAY_DATE)) + '-' + CONVERT(VARCHAR(10), DATEPART(dd, START_HOLIDAY_DATE)) AS DATETIME) >= @p_dtStartHolidayDateFrom
)
AND (
@p_dtEndHolidayDateTo IS NULL
OR CAST(CONVERT(VARCHAR(10), DATEPART(yyyy, @p_dtEndHolidayDateTo)) + '-' + CONVERT(VARCHAR(10), DATEPART(mm, END_HOLIDAY_DATE)) + '-' + CONVERT(VARCHAR(10), DATEPART(dd, END_HOLIDAY_DATE)) AS DATETIME) < DATEADD(DAY, 1, @p_dtEndHolidayDateTo)
)
по этой части, должны повторять фильтрацию независимо от года, только между днем и месяцем. Итак, если я ввожу 01 января 2017 года, com_holiday_id = 2, должен появиться «Natal dan tahun baru», но с тех пор, как мой преобразователь даты все еще прослушивался, когда пытаюсь отфильтровать конец года до нескольких дней в следующем году, когда я пытаюсь получить результат sql, который показывает: 2017-12-25 до 2017-01-02. Может быть, есть способ решить этот, возможно, встроенный в sql-сервер?
SELECT [COM_HOLIDAY_ID]
,[RECURRANCE]
,[START_HOLIDAY_DATE]
,[END_HOLIDAY_DATE]
,[HOLIDAY_NAME]
,[HOLIDAY_DESC]
,[CREATE_BY_USER_ID]
,[UPDATE_BY_USER_ID]
,[CREATE_DATE]
,[UPDATE_DATE]
FROM [PFS_HOLIDAY] WITH (NOLOCK)
WHERE RECURRANCE = 1
AND (
@p_sKeyword IS NULL
OR [HOLIDAY_NAME] LIKE '%' + @p_sKeyword + '%'
OR [HOLIDAY_DESC] LIKE '%' + @p_sKeyword + '%'
)
AND (
@p_dtStartHolidayDateFrom IS NULL
OR CAST(CONVERT(VARCHAR(10), DATEPART(yyyy, @p_dtStartHolidayDateFrom)) + '-' + CONVERT(VARCHAR(10), DATEPART(mm, START_HOLIDAY_DATE)) + '-' + CONVERT(VARCHAR(10), DATEPART(dd, START_HOLIDAY_DATE)) AS DATETIME) >= @p_dtStartHolidayDateFrom
)
AND (
@p_dtEndHolidayDateTo IS NULL
OR CAST(CONVERT(VARCHAR(10), DATEPART(yyyy, @p_dtEndHolidayDateTo)) + '-' + CONVERT(VARCHAR(10), DATEPART(mm, END_HOLIDAY_DATE)) + '-' + CONVERT(VARCHAR(10), DATEPART(dd, END_HOLIDAY_DATE)) AS DATETIME) < DATEADD(DAY, 1, @p_dtEndHolidayDateTo)
)
Есть ли другой способ решить этот случай? Что-то вроде дня и месяца?
Рассмотрим вычисляемый столбец для каждого из двух столбцов дат 'AS DATEADD (год, DATEDIFF (год, 0, col_name), 0)' - то эти вычисляемые столбцы будут иметь 1900 как год, и вы можете установить свою переменную на 1900. –
Не понимаю, Пожалуйста, объясните больше. Я имею в виду COM_HOLIDAY_ID \t \t RECURRANCE START_HOLIDAY_DATE \t END_HOLIDAY_DATE 2015-12-25 00: 00: 00,000 \t 2016-01-02 00: 00: 00,000 HOLIDAY_NAME Natal дана Tahun Бару должен появляться в фильтре, но Я пытаюсь использовать CAST (CONVERT (VARCHAR (10), DATEPART (yyyy, @p_dtEndHolidayDateTo)) + '-' + CONVERT (VARCHAR (10), DATEPART (mm, END_HOLIDAY_DATE)) + '-' + CONVERT (VARCHAR (10) , DATEPART (dd, END_HOLIDAY_DATE)) AS DATETIME)
toha
Реагивация означает, что он будет установлен каждый год – toha