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

问题描述 投票:1回答:1

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

select rdb$relation_name 
from rdb$relations 
where rdb$relation_name like '%T';
firebird
1个回答
1
投票

问题是RDB$RELATION_NAME的数据类型是CHAR(31)(Firebird 4中的CHAR(63)),这意味着它用空格填充。与LIKE的比较不会忽略尾随空格,这与忽略尾随空格的相等比较相反。

为了正确比较,您可以从值中TRIM尾随空格:

where trim(trailing from rdb$relation_name) like '%T'

或者使用带有SIMILAR TO的SQL正则表达式:

where rdb$relation_name similar to '%T *'

这类似于,但指定后面跟着零个或多个空格。

© www.soinside.com 2019 - 2024. All rights reserved.