在编写Postgres查询时,约束通常写为
WHERE a = $(a)
或WHERE b IN $(b:csv)
(如果您知道它是一个列表)。但是,如果值为null
,则必须将约束写入WHERE x IS NULL
。如果值为null或否,是否可以使查询自动格式化?
说我可能想找到第WHERE c = 1
行。如果我知道c
是1
,则将查询写为
db.oneOrNone(`SELECT * FROM blah WHERE c = $(c), { c })
但是,如果c
变成null
,则查询必须变成...WHERE c IS NULL
。
是否可以构造一个像WHERE $(c)
这样的通用查询,如果WHERE c = 1
是c
,它会自动格式化为1
,如果是WHERE c IS NULL
,它会自动格式化为c
Public sub GetWB(byval wb_name as string) as excel.workbook
Dim wbkCurr as excel.workbook
Set getwb=nothing
For each wbkCurr in application.workbooks
If lower(left(wbkCurr.name, instr(wbkCurr.name,”.”))) = lcase(wb_name) then
Set getwb = wbkCurr
Endif
Next wbkCurr
End function
设置为空吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
根据值是否为NULL
修改查询的一种非常有用的替代方法是使用IS [NOT] DISTINCT FROM
。根据参考资料:
对于非空输入,
IS DISTINCT FROM
与<>
运算符相同。但是,如果两个输入均为null,则返回false,如果只有一个输入为null,则返回true。类似地,对于非空输入,IS NOT DISTINCT FROM
与=
相同,但是当两个输入均为空时,它返回true;当只有一个输入为空时,它返回false。因此,这些谓词有效地表现为空值是正常数据值,而不是“未知”。
简而言之,使用=
代替IS NOT DISTINCT FROM
,使用<>
代替IS DISTINCT FROM
。
当比较两列(其中任一列可能为null)时,此功能特别有用。
请注意,IS [NOT] DISTINCT FROM
无法使用索引,因此某些查询的性能可能会很差。