有没有一个转义符与Postgresql中的任何内容都不匹配



Postgres中是否有一个转义符是"相反的";到%?当我使用where my_column like '%'时,将返回所有记录。但是,有没有一个运算符与任何内容都不匹配?与where my_column like MAGIC_OPERATOR中一样,不会返回任何记录?我正在从C#代码调用一个存储过程,这就是我所处的情况:

我的数据:

GRADES_TABLE
--------------------------------------------------
Math     |   History   |   English
Alice      A       |    NULL     |      B
Bob       NULL     |     A       |      B
Charlie    C       |     B       |     NULL

我的功能:

CREAT FUNCTION GetStudents(MathGrade CITEXT, HistGrade CITEXT, EngGrade CITEXT)
RETURNS TABLE (Student CITEXT)
AS $$
BEGIN
RETURN QUERY
SELECT STUDENT FROM GRADES_TABLE WHERE 
(COALESCE(Math, '') LIKE MathGrade
OR COALESCE(History, '') LIKE HistGrade
OR COALESCE(English, '') LIKE EngGrade
END $$

我的C#代码调用存储过程:

GetStudents("%", "%", "%") --> This should return Alice, Bob, and Charlie
GetStudents("A", "", "") --> This should return Alice
GetStudents("A", "A", "") --> This should return Alice and Bob 

由于表中有NULL值,所以我必须使用COALESCE使其为空字符串,以便like '%'可以找到它们。但是通过这种方式,C#代码中的所有三个调用都返回Alice、Bob和Charlie。如果我传入像GetStudents("A", "", "")这样的空字符串,结果是一样的。所以我想知道是否有什么特殊的转义字符与任何东西都不匹配?显然,我可以传递一些垃圾值GetStudents("A", "IMPOSSIBLE_GRADES", "IMPOSSIBLE_GRADES"),这将获得所需的结果。但只是想知道是否有合适的方法来实现这一点?也欢迎对Postgres函数或C#代码进行更改的建议。谢谢

您可以使用:

where my_column like null

在大多数情况下,您还可以使用正则表达式:

where my_column ~ '^$'

或者:

where my_column like ''

后两者只匹配空字符串。

最新更新