gpt4 book ai didi

SQL搜索值之间的日期;如果为NULL,则为最小值/最大值

转载 作者:行者123 更新时间:2023-12-04 13:04:22 26 4
gpt4 key购买 nike

我有一个T-SQL存储过程,我想在其中搜索特定的值,并且可以选择将搜索限制为特定的日期(如果传入了这些日期)。如果为这些日期之一传递了空值,则我想忽略这些值。我想通过将输入日期设置为最小或最大(如果它们为空)来做到这一点的方式。我宁愿不要对最小值和最大值进行硬编码。所以我想知道C#DateTime.MaxValueDateTime.MinValue的SQL等效项是什么。

我正在考虑像这样使用Coalesce

SELECT EmployeeName FROM Employee
WHERE EmployeeID = @EmployeeId AND
Birthday BETWEEN Coalesce(@StartDate, <MinDateTime>) AND
Coalesce(@EndDate, <MaxDateTime>)

是否有内置函数/常量/变量/枚举可用于 <MinDateTime><MaxDateTime>变量?

有什么建议么?

最佳答案

SQL Server中没有此类功能。您可以轻松找到BOL(1753-01-01-9999-12-31)中允许的min and max dates。或者,您也可以轻松地对另一个日期进行硬编码(如果您确实是在生日中工作,那么1800-01-01-2100-12-31可能就足够了)。或者,您也可以(如果这是您显示的范围查询),则使合并回生日本身:

SELECT EmployeeName FROM Employee
WHERE EmployeeID = @EmployeeId AND
Birthday BETWEEN Coalesce(@StartDate, Birthday) AND
Coalesce(@EndDate, Birthday)

但是请注意,这对于非常大的表不一定能很好地扩展。

接受后进行编辑,以回复OP的评论

通常,对于SQL,如果您经常需要“引用”数据,则可以自己将其添加为表。 (Google表示“日历表”或“数字表sql”)。因此,在这种情况下,如果您愿意,可以添加一个“常量”(或者也许是“限制”表):
create table Constants (
Lock char(1) not null,
datetimeMin datetime not null,
datetimeMax datetime not null,
intMin int not null,
intMax int not null,
/* Other Min/Max columns, as required */
constraint PK_Constants PRIMARY KEY (Lock),
constraint CK_Constants_Locked CHECK (Lock='X')
)
insert into Constants (Lock,datetimeMin,datetimeMax,intMin,intMax)
select 'X','17530101','99991231',-2147483648,2147483647

然后可以在查询中引用它(通过子选择或通过交叉连接到此表)。例如。
SELECT EmployeeName
FROM Employee, Constants
WHERE EmployeeID = @EmployeeId AND
Birthday BETWEEN Coalesce(@StartDate, Constants.datetimeMin) AND
Coalesce(@EndDate, Constants.datetimeMax)

(“锁定”,“主键”和“检查”约束共同使用,以确保该表中仅存在一行)

关于SQL搜索值之间的日期;如果为NULL,则为最小值/最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3749427/

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