gpt4 book ai didi

sql-server - 获取介于两者之间的日期的程序

转载 作者:行者123 更新时间:2023-12-03 16:41:20 25 4
gpt4 key购买 nike

我有一个包含 timesheet 的 SQL Server 数据库 table 。该表用于存储员工的角色。在我执行插入之前,我会检查员工在所选日期内是否具有任何预先存在的角色。

这是一个返回预先存在的角色数的存储过程

set @retVal=(select count(fk_RoleID) from dbo.TimesheetTable where 
(@startdate >= CAST((
STR( YEAR( StartDate ) ) + '/' +
STR( MONTH( StartDate ) ) + '/' +
STR( DAY( StartDate ) )
)
AS DATE
))-- AND EndDate <= '2012-08-30')
and
(@enddate < CAST(
(
STR( YEAR( EndDate ) ) + '/' +
STR( MONTH( EndDate ) ) + '/' +
STR( DAY( EndDate ) )
)
AS DATE
))
and fk_PersonnelID=@personnelID)

return @retVal

以下是一名员工的记录..
pk_ID  fk_PersonnelID  fk_RoleID  StartDate   EndDate     dateCreated
62 1 26 2012-10-01 2012-10-02 2012-10-25 15:55:12.940
81 1 20 2012-10-04 2012-10-06 2012-10-30 14:50:28.300

如果我尝试插入开始日期是 2012-10-05和结束日期是 2012-10-11 ,查询未能捕获 startdate ..和插入发生

我究竟做错了什么?

最佳答案

您重叠测试不正确。
测试应该是“ 两个开始都在相反的两端之前”。记住它,这很容易。

SELECT @retVal = CASE WHEN EXISTS (
select *
from dbo.TimesheetTable
where StartDate <= @EndDate
and @StartDate <= EndDate
and fk_PersonnelID=@personnelID) THEN 1 ELSE 0 END

要测试是否存在,请切换到使用 EXISTS,它会短路并在找到结果后立即为您提供结果,而不是对所有匹配项进行计数。

关于sql-server - 获取介于两者之间的日期的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13144970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com