我遇到了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.
如何在以下条件下构建查询?
答案 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