我正在处理一个查询:
SELECT DISTINCT PointPerson
FROM DailyTaskHours
WHERE ActivityDate BETWEEN @startDateParam
AND @endDateParam
GROUP BY PointPerson
HAVING SUM([Hours]) > 0
ORDER BY PointPerson
这是它返回的内容:

如您所见,返回的第一个值是一个空字符串。如何防止在查询中返回此行。如果空不返回..
我正在处理一个查询:
SELECT DISTINCT PointPerson
FROM DailyTaskHours
WHERE ActivityDate BETWEEN @startDateParam
AND @endDateParam
GROUP BY PointPerson
HAVING SUM([Hours]) > 0
ORDER BY PointPerson
这是它返回的内容:

如您所见,返回的第一个值是一个空字符串。如何防止在查询中返回此行。如果空不返回..
您只需在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,其结果必须至少有一个字符。
还要考虑空值(如果需要)
SELECT DISTINCT PointPerson
FROM DailyTaskHours
WHERE ActivityDate BETWEEN @startDateParam
AND @endDateParam
AND isnull(PointPersonm,'') <> ''
GROUP BY PointPerson
HAVING SUM([Hours]) > 0
ORDER BY PointPerson
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