我正在尝试过滤我的查询取决于用户在期间(月份或年份)中选择的内容 我通过BIRT检索参数。
我的查询是:
SELECT DATE
FROM TABLE
WHERE Year(DATE) = Year(CURRENT_TIMESTAMP) AND Month(DATE) = Month(CURRENT_TIMESTAMP)
我的结果是:
DATE
2017-02-14
2017-02-14
2017-02-14
2017-02-14
2017-02-14
2017-02-14
2017-02-14
2017-02-01
2017-02-02
我要做的是:如果用户选择年份,我将最后一个条件放在评论中,结果应为:
DATE
2017-02-14
2017-02-14
2017-02-14
2017-02-14
2017-02-14
2017-02-14
2017-02-14
2017-01-25
2017-01-26
2017-02-01
2017-02-02
2017-01-20
2017-01-20
2017-01-20
2017-01-20
2017-01-20
2017-01-20
2017-01-20
2017-01-20
2017-01-20
我尝试使用CASE,如:
CASE WHEN USER_PARAM = 'month' then Month(DATE) = Month(CURRENT_TIMESTAMP) END
显然,这不好, 我尝试使用OR / AND,如:
Year(DATE) = Year(CURRENT_TIMESTAMP)
OR ('USER_PARAM' = 'MONTH' AND Month(DATE) = Month(CURRENT_TIMESTAMP))
如果'USER_PARAM' = 'MONTH'
为真 - >这是行不通的,因为我有这么多年(不是现在的)
Year(DATE) = Year(CURRENT_TIMESTAMP)
AND ('USER_PARAM' = 'MONTH' AND Month(DATE) = Month(CURRENT_TIMESTAMP))
如果'USER_PARAM' = 'MONTH'
为假 - >这不起作用,因为我没有任何数据
答案 0 :(得分:1)
你刚刚改变了你的状况 替换' MONTH'按照年龄'并改变' AND'用' OR'你很高兴。
Year(DATE) = Year(CURRENT_TIMESTAMP)
AND ('USER_PARAM' = 'YEAR' OR Month(DATE) = Month(CURRENT_TIMESTAMP))
答案 1 :(得分:1)
使用可选用户参数的最佳方法是(我相信)允许null为外卡或默认值。
因此,如果您的参数@month可以为null,则以下内容将起作用
WHERE MONTH(DATE) = COALESCE(@month,MONTH(DATE))
如果@month为null,则使用此语句,然后一切都匹配,否则过滤
因此,如果您只想要默认的当前月份,可以使用
WHERE MONTH(DATE) = COALESCE(@month,MONTH(CURRENT_TIMESTAMP))
最终的where语句如下所示:
WHERE YEAR(DATE) = COALESCE(@year,YEAR(CURRENT_TIMESTAMP))
AND MONTH(DATE) = COALESCE(@month,MONTH(CURRENT_TIMESTAMP))