2013-10-28 89 views
0

我與查詢工作:不選擇行,如果它是空的

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

這是它返回:

enter image description here

正如你可以看到返回的第一個值是一個空字符串。如何防止在查詢中返回此行。如果空不要回歸..

+0

你可以正常化你的表;) – woz

+0

他們不是我的表= P –

回答

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來消除,其結果必須至少有一個字符。

+0

您可以用'len',而不是同時使用' <>''''和'null' :) –

+0

@huMptyduMpty是的,但是如果他有空格呢?那些LEN> 0,但不應該顯示。 –

+0

是的,我已經在我的回答中回答了! –

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 
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 
相關問題