Sql server 与Reaccurrence相关的日期和月份(无年份)之间的SQL
对不起, 这是我的应用程序: db设计: 所以,规则是什么时候发生,所以我不认为一年只是一个月和一天。 到目前为止,这是我的查询,但当我尝试时,当开始日期为12月,结束日期为明年1月时,仍然失败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
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
)
)