0

我正在处理一个查询:

SELECT DISTINCT PointPerson
FROM DailyTaskHours
WHERE ActivityDate BETWEEN @startDateParam
        AND @endDateParam
GROUP BY PointPerson
HAVING SUM([Hours]) > 0
ORDER BY PointPerson

这是它返回的内容:

在此处输入图像描述

如您所见,返回的第一个值是一个空字符串。如何防止在查询中返回此行。如果空不返回..

4

3 回答 3

2

您只需在WHERE子句中添加一个条件

SELECT DISTINCT PointPerson
FROM DailyTaskHours
WHERE ActivityDate BETWEEN @startDateParam AND @endDateParam
    AND PointPerson <> ''
GROUP BY PointPerson
HAVING SUM([Hours]) > 0
ORDER BY PointPerson

这种情况有很多变化,具体取决于您的表是如何标准化的。

如果您确定您将始终有一个空格,那么您可以使用:

AND PointPerson <> ''

如果有可能有一个NULL值,那么使用它是最明智的:

AND ISNULL(PointPerson, '') <> ''

如果该字段中可能有空格(它们会显示为空白,但仍然不会被第一个选项捕获),您可以使用附加条件以及前两个的组合,这提供了最安全的选项(涵盖大多数情况):

AND ISNULL(PointPerson, '') <> ''
AND LEN(LTRIM(PointPerson)) > 0

这种条件组合将帮助您避免 NULL 值和多个空格,这些空格将通过用 修剪它们来消除LTRIM,其结果必须至少有一个字符。

于 2013-10-28T14:32:14.523 回答
1

还要考虑空值(如果需要)

SELECT DISTINCT PointPerson
FROM DailyTaskHours
WHERE ActivityDate BETWEEN @startDateParam
        AND @endDateParam
     AND isnull(PointPersonm,'') <> ''
GROUP BY PointPerson
HAVING SUM([Hours]) > 0
ORDER BY PointPerson
于 2013-10-28T14:33:05.827 回答
1
SELECT DISTINCT PointPerson
FROM DailyTaskHours
WHERE ActivityDate BETWEEN @startDateParam
        AND @endDateParam
        AND len(ltrim(rtrim(PointPerson)))>0
GROUP BY PointPerson
HAVING SUM([Hours]) > 0
ORDER BY PointPerson
于 2013-10-28T14:34:51.787 回答