我有一张表,其中对于相同的AgencyMaster ID,我有多个条目具有不同的effectiveStart日期和effectiveEnd日期,以及一个条目,其中effectiveEnd和effectiveStart都为null。
如果我给的日期没有条目那么它应该返回记录,其中effectiveEnd和effectiveStart为null,否则对应的记录具有该特定的effectiveStart和effectiveEnd日期,但是我的问题是它的返回记录为null date并记录特定日期,总共2条记录,以便如何避免这种情况。
select AgencyBillingSettingsMaster.AgencyBillingSettingMasterID, *
from AgencyBillingSettingsMaster
where (AgencyBillingSettingsMaster.effectivePeriodStart is not null and
AgencyBillingSettingsMaster.effectivePeriodEnd is not null and
(convert(datetime,@EffectivePeriod)>=effectivePeriodStart and
convert(datetime,@EffectivePeriod)<effectivePeriodEnd)
or (AgencyBillingSettingsMaster.effectivePeriodStart is null and
AgencyBillingSettingsMaster.effectivePeriodEnd is null))
附表屏幕截图
答案 0 :(得分:1)
希望你放错了右括号。每个条件应该是分开的,但在您当前的代码中,所有条件都是单一条件。
代码将解决您的问题:
select AgencyBillingSettingsMaster.AgencyBillingSettingMasterID, *
from AgencyBillingSettingsMaster
where (AgencyBillingSettingsMaster.effectivePeriodStart is not null and
AgencyBillingSettingsMaster.effectivePeriodEnd is not null and
(convert(datetime,@EffectivePeriod)>=effectivePeriodStart and
convert(datetime,@EffectivePeriod)<effectivePeriodEnd)) -- here the first condition need to close
or -- the second condition should have another block
(AgencyBillingSettingsMaster.effectivePeriodStart is null and
AgencyBillingSettingsMaster.effectivePeriodEnd is null)
答案 1 :(得分:0)
在MySQL中可以将函数FOUND_ROWS()
与UNION
结合使用以获得条件联合:
SELECT .... FROM ... WHERE your_condition_for_existing_dates_here
UNION ALL
SELECT .... FROM ... WHERE FOUND_ROWS() = 0 AND your_condition_for_null_dates_here
您的查询将如下:
select AgencyBillingSettingsMaster.AgencyBillingSettingMasterID, *
from AgencyBillingSettingsMaster
where (AgencyBillingSettingsMaster.effectivePeriodStart is not null and
AgencyBillingSettingsMaster.effectivePeriodEnd is not null and
(convert(datetime,@EffectivePeriod)>=effectivePeriodStart and
convert(datetime,@EffectivePeriod)<effectivePeriodEnd)
union all
select AgencyBillingSettingsMaster.AgencyBillingSettingMasterID, *
from AgencyBillingSettingsMaster
where found_rows() = 0
and (AgencyBillingSettingsMaster.effectivePeriodStart is null and
AgencyBillingSettingsMaster.effectivePeriodEnd is null))