详细情况是这样的。我有一张表里面有建设状态1开始时间和建设状态2开始时间等其他时间,有一个日期参数a ,所要实现的查询结果要满足(a 参数的值在建设状态1开始时间和建设状态2开始时间之间的值。),同时建设状态1开始时间和建设状态2开始时间这两个字段的值有可能为空,筛选的结果中不包括(状态1开始时间和状态2开始时间都为空)的结果。当状态1开始时间
为空时,筛选状态2开始时间晚于a 参数的值;当状态1开始时间为空时,筛选状态1开始时间早于a 参数的值。
请问要实现上述筛选结果,该如何实现??谢谢!
为空时,筛选状态2开始时间晚于a 参数的值;当状态1开始时间为空时,筛选状态1开始时间早于a 参数的值。
请问要实现上述筛选结果,该如何实现??谢谢!
解决方案 »
- 毫无头绪的sqlserver分类排序汇总的问题!!!
- 求诊断系统的方法
- SQL导出EXCEL乱序问题
- 使用sql server全文检索时,检索条件怎么用变量传查询条件?
- 触发器的使用方法
- sqlserver 在‘计算列规范’的公式中,输入以下东西会报错,为什么,
- SQL中如何将符合子表中多个字段值作为查询主表的条件
- 请问我怎么SELECT出来一个流水号呢?从1开始,每一条+1,表里没有这个字段,要在SQL里生成,有办法吗?
- 在数据库dbname中检测到一个可能的数据库一致性问题,应该运行DBCC CHECKDB和DBCC CHECKCATALOG
- 一个full outer join 记录显示的问题,请帮忙看看!
- sql中游标只执行一次
- MS-SQL 年假计算问题(难)
and
a < isnull(建设状态1开始时间, '9999-12-31')
case when 状态1 is null then '状态2<@a'
when 状态2 is null then '状态1>@a'
when 状态1 is null and 状态2 is null then '不返回值是不是?'
else @a between 状态1 and 状态2
是这样的逻辑关系。
case when 状态1 is null then '状态2>@a'
when 状态2 is null then '状态1<@a'
when 状态1 is null and 状态2 is null then '这部分值不要'else @a between 状态1 and 状态2
set @s='where 1=1 '
if 状态1 is null
set @s=' and 状态2>@a '
else if 状态2 is null
set @s=' and 状态1<@a '
else if 状态1 is null and 状态2 is null
set @s=''
else @s='@a between 状态1 and 状态2'
exec ('select * from tb '+@s)
select
case when 状态1 is null and 状态2 is not null and 状态2>@a then 值
when 状态1 is not null And 状态2 is null and 状态1<@a then 值
when 状态1 is not null and 状态2 is not null and @a >= 状态1 and @a <= 状态2 then 值
end
from tb
这种方式不合适。我的状态1的值不是变量,状态1的值是存在数据表中的,而且有很多不同的值。
类似于:
id 状态1 状态2
001 null 2009/10/9
002 null 2008/10/2
003 2000/10/2 null
004 2000/9/4 null
... ... ...
现在要查询到满足一个日期在状态1和状态2之间的表的所有记录。
where里面加条件判断就是这种用动态sql构造的,是可以满足你的要求。
WHERE语句是支持语句,请看下面:实现在三个字段上组合查询,很多人用拼凑字符串,再执行字符串-- =============================================
-- Author: 袁旭东
-- Create date: 2011-08-17
-- Description: 获取符合条件的任务清单列表
-- (不包含已作删除标识的数据)
-- =============================================
ALTER PROCEDURE [dbo].[getWlRecords]
@FirstName NVARCHAR(50)
, @LastName NVARCHAR(50)
, @PatientID NVARCHAR(50)
AS
BEGIN
SELECT [ID]
,[FirstName]
,[LastName]
,[PatientAge]
,[Gender]
,[Modality]
,[RequestedProcedureDescription]
,[AccessionNumber]
,[RequestingPhysician]
,[ReferringPhysician]
,[PatientID]
,[ScheduledStartDate]
FROM WL
WHERE DeleteFlag=0
AND FirstName LIKE (CASE WHEN LEN(RTRIM(ISNULL(@FirstName,'')))=0 THEN '%' ELSE '%'+RTRIM(ISNULL(@FirstName,''))+'%' END)
AND LastName LIKE (CASE WHEN LEN(RTRIM(ISNULL(@LastName,'')))=0 THEN '%' ELSE '%'+RTRIM(ISNULL(@LastName,''))+'%' END)
AND PatientID LIKE (CASE WHEN LEN(RTRIM(ISNULL(@PatientID,'')))=0 THEN '%' ELSE '%'+RTRIM(ISNULL(@PatientID,''))+'%' END)
ORDER BY [ID]
END