如何在Firebird系统表中查找所有名称以特定后缀结尾的表

时间:2019-03-22 06:56:15

标签: firebird

我正在尝试运行以下查询,以获取与模式匹配的表名的列表。我的数据库中有一些名称以T结尾的表,但以下查询不起作用。它没有返回任何表名。如果我摆脱了T,只将引号中的%留在引号中,它将为我提供数据库中的所有表名。

select rdb$relation_name 
from rdb$relations 
where rdb$relation_name like '%T';

1 个答案:

答案 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”类似,但指定后跟零个或多个空格。