如果在Where子句SQL中

时间:2018-12-10 12:36:54

标签: sql sql-server database

我遇到了SQL查询问题。我有一个包含10个字段的表格。 我需要创建一个查询,它通过字段ProductionYear(int)在2个变量@startDate(int)和@endDate(int)之间获取日期。这两个变量都是不必要的。我需要使用以下条件构建sql查询:

If(@endDate = 0)
Select Id from MyTable where ProductionYear > @startDate
else
Select Id from MyTable where ProductionYear BETWEEN @startDate and @endDate.

如何在以下条件下构建查询?

2 个答案:

答案 0 :(得分:2)

您可以将其合并到单个查询中:

Select Id
from MyTable
where ProductionYear >= @startDate and
      (ProductionYear <= @endDate or @endDate = 0);

您的两个查询在是否包含@startDate上不一致。 BETWEEN包含比较值,但>不包含比较值。

如果您希望@startDate也可以选择:

Select Id
from MyTable
where (ProductionYear >= @startDate or @startDate = 0) and
      (ProductionYear <= @endDate or @endDate = 0);

一些其他评论。将“年份”称为“日期”会造成混淆。您的参数可能应该称为@startYear@endYear

这些查询将导致对表进行全表扫描。这可能不是什么大问题,因为粒度是按年计算的。如果对粒度进行了更细化,则可能需要使用索引。在这种情况下,也许最好的方法是动态SQL。

答案 1 :(得分:0)

您可以尝试使用

时的大小写
.Value