那在这个语句中怎么判断传入的startDate和endDate不为空,这是dataway中的sql执行器,var getNumDzs = @@sql(channelId,startDate,endDate)<% SELECT COUNT(DISTINCT dzs_code) FROM tb_tls_contact_monitor WHERE channel_id = #{channelId}::int8 and day_id >= #{startDate}::int8 and day_id <= #{endDate}::int8 AND dzs_code != '0' AND dzs_code != ''; %>;
时间: 2024-04-11 10:26:31 浏览: 179
要判断传入的 `startDate` 和 `endDate` 是否为空,您可以使用条件语句 `CASE` 和逻辑运算符 `AND` 来实现。以下是在 Dataway 中执行 SQL 查询时判断日期参数是否为空的示例代码:
```sql
var getNumDzs = @@sql(channelId, startDate, endDate)<%
SELECT COUNT(DISTINCT dzs_code)
FROM tb_tls_contact_monitor
WHERE channel_id = #{channelId}::int8
AND CASE
WHEN #{startDate} IS NOT NULL AND #{endDate} IS NOT NULL THEN day_id >= #{startDate}::int8 AND day_id <= #{endDate}::int8
WHEN #{startDate} IS NOT NULL THEN day_id >= #{startDate}::int8
WHEN #{endDate} IS NOT NULL THEN day_id <= #{endDate}::int8
ELSE TRUE
END
AND dzs_code != '0'
AND dzs_code != '';
%>;
```
在上述代码中,我们使用了 `CASE` 条件语句来判断 `startDate` 和 `endDate` 是否为空。如果两个日期参数都不为空,则使用 `day_id >= #{startDate}::int8 AND day_id <= #{endDate}::int8` 来筛选符合条件的行。如果只有 `startDate` 不为空,则使用 `day_id >= #{startDate}::int8`。如果只有 `endDate` 不为空,则使用 `day_id <= #{endDate}::int8`。如果两个日期参数都为空,则不进行日期筛选,即整个条件为真。
请注意,在 Dataway 中,我们使用 `#{}` 来引用参数,并在 SQL 查询中将其替换为实际的参数值。确保将 `channelId`、`startDate` 和 `endDate` 替换为您实际使用的参数名称。
阅读全文