2016-08-16 2 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は小数点以下2桁のフィールドです。値は空白にすることも、0 to 360にすることもできます。私は、空白または空の値をしたいが、dirは、あなたがこれまでにが見るべき値のみが数値である、数字、非NULL可能列であると仮定すると

+0

単一のエンティティとして自分自身に巨大な好意と店舗の日付と時刻を行います。 – Strawberry

+0

この動作は複製できません。あなたは '空白'の代わりにNULLを意味しますか – Strawberry

答えて

1

ゼロ値の記録を必要としません。したがってWHERE条件:あなたは空の文字列に対して数を比較しようとしているため

WHERE dir <> '' 

は、ハイレベルでは意味がありません。データベースレベルでは、xが0の場合はMySQLはx <> ''の場合false、それ以外の場合はfalseを返します。したがって、0の値を持つdirの2つのレコードが除外されます。 dirの値に関してはの空レコードがあります。

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

Iを:あなたが0.0にデフォルト値を設定しているので、あなたのビジネスロジックでゼロ値、および何を参照してください場合は、次のクエリあなたが望むかもしれないが、この値を更新しますここでは、この本を実証フィドルを作成しました:

SQLFiddle

+0

私は理解しませんでした。上記のSQLでは、dirが空でないすべてのレコードが必要です。 – mansoondreamz

+0

あなたは 'dir'が空(' '')か、それとも '' NULL ''になる可能性があると教えていますか? –

+0

空でも値0〜360でもかまいません。NULLは許可されていません – mansoondreamz

関連する問題