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 ''
后两者只匹配空字符串。