我正在尝试运行以下查询,以获取与模式匹配的表名的列表。我的数据库中有一些名称以T结尾的表,但以下查询不起作用。它没有返回任何表名。如果我摆脱了T,只将引号中的%
留在引号中,它将为我提供数据库中的所有表名。
select rdb$relation_name
from rdb$relations
where rdb$relation_name like '%T';
答案 0 :(得分:1)
问题在于RDB$RELATION_NAME
的数据类型为CHAR(31)
(在Firebird 4中为CHAR(63)
),这意味着它被空格填充。与LIKE
的比较不会忽略尾随空格,这与相等比较会忽略尾随空格相反。
为进行正确的比较,您可以TRIM
取值后的空格:
where trim(trailing from rdb$relation_name) like '%T'
或将SQL正则表达式与SIMILAR TO
一起使用:
where rdb$relation_name similar to '%T *'
与“ like”类似,但指定后跟零个或多个空格。