我正在尝试运行以下查询以获取与模式匹配的表名列表。我的数据库中的表有名称以T结尾,但以下查询不起作用。它不会返回任何表名。如果我摆脱T,只在引号中留下%
,它会给我db中的所有表名。
select rdb$relation_name
from rdb$relations
where rdb$relation_name like '%T';
问题是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 *'
这类似于,但指定后面跟着零个或多个空格。