Sql server 与Reaccurrence相关的日期和月份(无年份)之间的SQL

Sql server 与Reaccurrence相关的日期和月份(无年份)之间的SQL,sql-server,Sql Server,对不起, 这是我的应用程序: db设计: 所以,规则是什么时候发生,所以我不认为一年只是一个月和一天。 到目前为止,这是我的查询,但当我尝试时,当开始日期为12月,结束日期为明年1月时,仍然失败 ALTER PROC[dbo]。[uspPFS_HolidayListWithDate或WithUnionReaccurrence]( @p_sKeyword VARCHAR(255)=空 ,@p_dtStartHolidayDateFrom DATETIME=NULL ,@p_DtendHoli

对不起, 这是我的应用程序:

db设计:

所以,规则是什么时候发生,所以我不认为一年只是一个月和一天。 到目前为止,这是我的查询,但当我尝试时,当开始日期为12月,结束日期为明年1月时,仍然失败

ALTER PROC[dbo]。[uspPFS_HolidayListWithDate或WithUnionReaccurrence](
@p_sKeyword VARCHAR(255)=空
,@p_dtStartHolidayDateFrom DATETIME=NULL
,@p_DtendHolidayDateToDateTime=NULL
)
作为
开始
不计数;
选择[COM\u HOLIDAY\u ID]
,[复发]
,[开始假日日期]
,[假期结束日期]
,[假日名称]
,[假日描述]
,[按用户ID创建用户]
,[按用户ID更新用户ID]
,[创建日期]
,[更新日期]
从[PFS_HOLIDAY]到(NOLOCK)
在哪里(
@p_sKeyword为空
或[假日名称]如“%”+@p_sKeyword+“%”
或者像“%”+@p_sKeyword++“%”这样的[假日描述]
)
及(
@p_dtStartHolidayDateFrom为空
或@p\u dtstartholidaydate介于[开始假日日期]
及[假期结束日期]
)
联合
选择[COM\u HOLIDAY\u ID]
,[复发]
,[开始假日日期]
,[假期结束日期]
,[假日名称]
,[假日描述]
,[按用户ID创建用户]
,[按用户ID更新用户ID]
,[创建日期]
,[更新日期]
从[PFS_HOLIDAY]到(NOLOCK)
在哪里(
@p_sKeyword为空
或[假日名称]如“%”+@p_sKeyword+“%”
或者像“%”+@p_sKeyword++“%”这样的[假日描述]
)
及(
@p_dtEndHolidayDateTo为空
或@p\u dtEndHolidayDateTo介于[开始假日日期]
及[假期结束日期]
)
联合
选择[COM\u HOLIDAY\u ID]
,[复发]
,[开始假日日期]
,[假期结束日期]
,[假日名称]
,[假日描述]
,[按用户ID创建用户]
,[按用户ID更新用户ID]
,[创建日期]
,[更新日期]
从[PFS_HOLIDAY]到(NOLOCK)
在哪里(
@p_sKeyword为空
或[假日名称]如“%”+@p_sKeyword+“%”
或者像“%”+@p_sKeyword++“%”这样的[假日描述]
)
及(
@p_dtStartHolidayDateFrom为空
或[开始假日日期]>=@p\u dtStartHolidayDateFrom
)
及(
@p_dtEndHolidayDateTo为空
或[结束假日日期]=@p\u dtStartHolidayDateFrom
)
及(
@p_dtEndHolidayDateTo为空
或转换(转换(VARCHAR(10),DATEPART(yyyy,@p_dtendholidaydeto))+'-'+转换(VARCHAR(10),DATEPART(mm,END_HOLIDAY_DATE))+'-'+转换(VARCHAR(10),DATEPART(dd,END_holidaydate))为DATETIME)
<
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)
            )
  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)
            )
select *
from [PFS_HOLIDAY] with (NOLOCK)
where
    ([HOLIDAY_NAME] like '%' + isnull(@p_sKeyword,'') + '%' OR [HOLIDAY_DESC] LIKE '%' + isnull(@p_sKeyword,'') + '%') and
    (
        (
            -- compare start date
            case
                when RECURRANCE = 1 then
                    cast(year(@p_dtStartHolidayDateFrom) as nvarchar(4)) + cast(month(START_HOLIDAY_DATE) as nvarchar(2)) + cast(day(START_HOLIDAY_DATE) as nvarchar(2))
                else
                    START_HOLIDAY_DATE                  
            end >= @p_dtStartHolidayDateFrom
        )
        and
        (
            -- compare end date
            case
                when RECURRANCE = 1 then
                    cast(year(@p_dtEndHolidayDateTo) as nvarchar(4)) + cast(month(END_HOLIDAY_DATE) as nvarchar(2)) + cast(day(END_HOLIDAY_DATE) as nvarchar(2))
                else
                    END_HOLIDAY_DATE                    
            end <= @p_dtEndHolidayDateTo
        )
    )