我正试图获得所有优惠券,其中expirationDate(日期类型)为零:
@coupons = @deal.coupons.all
@coupons = @coupons.where("expirationDate = ?", nil)
但由于某种原因,上面的代码不起作用。 然而,如果我改为:
@coupons = @deal.coupons.all
@coupons = @coupons.where(expirationDate: nil)
它可以获得我想要的所有零优惠券。我很困惑为什么第一个不起作用,但第二个不起作用。任何帮助将不胜感激。
答案 0 :(得分:3)
例如。
User.where("name = ?",nil)
sql输出:
SELECT "users".* FROM "users" WHERE (name = NULL)
另一种格式:
u = User.where(name: nil)
sql输出:
SELECT "users".* FROM "users" WHERE "users"."name" IS NULL
你会发现sql不同。详细信息SQL is null and = null [duplicate]
答案 1 :(得分:2)
NULL
或NOT NULL
的SQL查询如下:
expirationDate IS NULL
或expirationDate IS NOT NULL
它并不适用于平等的#34; ="标志。你不能在SQL中做
expirationDate = NULL
您也可以尝试这样做
@coupons = @coupons.where("expirationDate IS NULL")
您可以查看此答案,了解在条件https://stackoverflow.com/a/4252615/343679
中使用null
的其他替代方法