Sql server 存储过程中日期参数的SQL通配符

Sql server 存储过程中日期参数的SQL通配符,sql-server,date,stored-procedures,wildcard,Sql Server,Date,Stored Procedures,Wildcard,我有一个带有单个参数的存储过程@date 该过程是一个select语句,包含: 其中dateTimeGmt介于@date和dateadd(dd,9,@date) 我希望能够调用此过程,并使用表中的所有日期获得所有结果 将@date设置为%或NULL或%-%-%不起作用 如果exec没有传递任何参数,是否有一种优雅的方法让过程忽略where子句 我希望能够调用此过程并获得所有结果 使用表中的所有日期 将@date设置为%或NULL或%-%-%无效 %比较仅适用于字符串类型,不适用于日期 是否有一种

我有一个带有单个参数的存储过程
@date

该过程是一个
select
语句,包含:

其中dateTimeGmt介于@date和dateadd(dd,9,@date)

我希望能够调用此过程,并使用表中的所有日期获得所有结果

@date
设置为
%
NULL
%-%-%
不起作用

如果
exec
没有传递任何参数,是否有一种优雅的方法让过程忽略
where
子句

我希望能够调用此过程并获得所有结果 使用表中的所有日期

将@date设置为%或NULL或%-%-%无效

%比较仅适用于字符串类型,不适用于日期

是否有一种优雅的方式让程序忽略在哪里 子句,如果没有向exec传递参数

尝试如下更改where子句

where (dateTimeGmt between @date and dateadd(dd,9,@date) ) or @date  IS NULL
我希望能够调用此过程并获得所有结果 使用表中的所有日期

将@date设置为%或NULL或%-%-%无效

%比较仅适用于字符串类型,不适用于日期

是否有一种优雅的方式让程序忽略在哪里 子句,如果没有向exec传递参数

尝试如下更改where子句

where (dateTimeGmt between @date and dateadd(dd,9,@date) ) or @date  IS NULL

当@date和dateadd(dd,9,@date)之间的dateTimeGmt或@date为空时,trickYou可能想读Erland Sommarskog的
当@date和dateadd(dd,9,@date)之间的dateTimeGmt或@date为空时,trickYou可能想读Erland Sommarskog的
当@date和date之间的dateTimeGmt为空时,trickYou可能想读Erland Sommarskog的这是如何工作的?NULL是NULL返回所有内容,那么当日期是OR时为什么仍然返回子集呢?在NULL和NULL之间返回nothing,在这种情况下,NULL是NULL,返回所有内容。逻辑是否有良好的分解?如果将值传递给date参数,如果行日期在定义的日期之间,则条件的第一部分将返回true(true或false=>true),如果不是,则第一部分为false,因此(false或false=>false)将不返回行。对于第二种情况,当date参数为null时,第二部分始终为true,因此(false或true=>true)对于每一行,它将返回查询的每一行。这是如何工作的?NULL是NULL返回所有内容,那么当日期是OR时为什么仍然返回子集呢?在NULL和NULL之间返回nothing,在这种情况下,NULL是NULL,返回所有内容。逻辑是否有良好的分解?如果将值传递给date参数,如果行日期在定义的日期之间,则条件的第一部分将返回true(true或false=>true),如果不是,则第一部分为false,因此(false或false=>false)将不返回行。对于第二种情况,当date参数为null时,第二部分始终为true,因此对于每一行(false或true=>true),它将返回查询的每一行。