2

インストール日と削除日のみに基づいて在庫を追跡し、特定の日にインストールされたものを報告しようとしています。まだインストールされているレコードには削除日がありません。そのため、削除日を に設定しようとしていDate(now())ます。しかし、その間に追加するinstall_dateremoval_date、両方の日付を持つレコードのみが見つかります。

を含む在庫テーブルがあり、name2012-01-01から 2014-12-31 までのすべての日付を含むテーブルがあります。install_dateremoval_datemaster_date

Select inventory.name, 
       inventory.install_date, 
       IFNULL(inventory.removal_date,DATE(NOW())), 
       master_date.date 
FROM inventory, master_date 
WHERE master_date.date BETWEEN inventory.install_date 
                       AND inventory.removal_date

between 句を削除すると、NOW に設定されますが、 NOW より前removal_dateのレコードが引き続き含まれます。removal_datewhere句を使用すると、removal_datenullではないが日付フィールドが正しいレコードのみが返されます。

removal_dateNULL の代わりに NOW を使用して、正しいレコードを返すにはどうすればよいですか?

4

2 に答える 2

1

指定されたパラメーターで最初の非 null 値を返す COALESCE() を使用できます。

できるよ:

BETWEEN inventory.install_date AND COALESCE(inventory.removal_date, DATE(NOW())

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

于 2013-08-21T22:39:31.850 に答える
0

あなたの質問を正しく理解できたら、次のように言います。

Select IFNULL(inventory.removal_date,DATE(NOW()))

新しいフィールドを返しています。

試す:

Select inventory.name, 
       inventory.install_date, 
       IFNULL(inventory.removal_date,DATE(NOW())), 
       master_date.date 
FROM inventory, master_date 
WHERE master_date.date BETWEEN inventory.install_date 
                       AND IFNULL(inventory.removal_date,DATE(NOW()))
于 2013-08-21T22:41:05.310 に答える