如何在pg-promise中正确编写具有空约束的查询?

时间:2019-01-19 01:53:12

标签: pg-promise

在编写Postgres查询时,约束通常写为 WHERE a = $(a)WHERE b IN $(b:csv)(如果您知道它是一个列表)。但是,如果值为null,则必须将约束写入WHERE x IS NULL。如果值为null或否,是否可以使查询自动格式化?

说我可能想找到第WHERE c = 1行。如果我知道c1,则将查询写为

db.oneOrNone(`SELECT * FROM blah WHERE c = $(c), { c })

但是,如果c变成null,则查询必须变成...WHERE c IS NULL

是否可以构造一个像WHERE $(c)这样的通用查询,如果WHERE c = 1c,它会自动格式化为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 设置为空吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Custom Type Formatting来进行动态查询:

t.test

然后您可以将其作为格式值传递:

t.test

答案 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无法使用索引,因此某些查询的性能可能会很差。