2016-08-16 38 views
1

在一個表中,我在某些記錄中的某個字段中的值爲zero(0),但是當我使用查詢來避免此字段中的空值時,它不考慮具有0值的字段。如何克服這一點?mysql零和空值

SELECT 
    * 
FROM wr 
WHERE dir <> '' 
AND UNIX_TIMESTAMP(CONCAT(date, ' ', time)) 
BETWEEN '$time_start_unix' AND '$time_end_unix 

字段dir是一個帶有兩個小數點的十進制字段。值可以是空白以及0 to 360。我不想要空值或空值,但需要零值記錄

+0

幫自己一個大忙和存儲日期和時間作爲一個單一的實體。 – Strawberry

+0

我無法複製此行爲。你的意思是NULL而不是'空白' – Strawberry

回答

1

假設dir是一個數字,不可爲空的列,那麼您應該看到的唯一值是數字。因此,WHERE條件:

WHERE dir <> '' 

使得在較高的水平沒有任何意義,因爲你試圖反對一個空字符串比較的數字。在數據庫級別,只要x爲零,MySQL就會返回false,對於x <> '',否則爲true。因此,具有零值的dir的2條記錄正被濾除。有沒有關於dir的值的空記錄。然而,由於您的默認值設置爲0.0,如果你看到一個零值,並沒有在你的業務邏輯將與該值更新,那麼下面的查詢可能是你想要什麼:

SELECT * 
FROM wr 
WHERE dir <> 0.0 AND 
     UNIX_TIMESTAMP(CONCAT(date, ' ', time)) 
     BETWEEN '$time_start_unix' AND '$time_end_unix 

我已經創建了一個小提琴展示這款本在這裏:

SQLFiddle

+0

我不明白。在上面的sql中,我希望所有記錄的dir不爲空。 – mansoondreamz

+0

你是否告訴我們'dir'可能是空的('''')或者它可能是'NULL'? –

+0

它可能爲空或值爲0到360.不允許爲NULL – mansoondreamz