如何从DBC.tablesv列出带日期后缀的表?求查询语句
Teradata查询:提取符合
xxx_test_YYYYMMDD格式的表名 基础匹配方案
适用于仅匹配表名格式、无需验证日期有效性的场景,性能最优:
SELECT DatabaseName, TableName FROM DBC.TablesV WHERE TableName LIKE '%\_test\_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' ESCAPE '\' AND TableKind = 'T';
%\_test\_:匹配任意前缀后接_test_(下划线用ESCAPE '\'转义,避免被当作单字符通配符)- 8个
[0-9]:精准匹配8位数字日期段 TableKind = 'T':仅筛选实体表,排除视图、存储过程等非表对象
严格验证日期有效性方案
如果需要确保8位数字是合法的YYYYMMDD日期,可增加日期转换验证:
SELECT DatabaseName, TableName FROM DBC.TablesV WHERE TableName LIKE '%\_test\_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' ESCAPE '\' AND TableKind = 'T' AND TO_DATE(SUBSTR(TableName, CHARINDEX('_test_', TableName) + 6, 8), 'YYYYMMDD') IS NOT NULL;
SUBSTR(TableName, CHARINDEX('_test_', TableName) + 6, 8):提取表名中_test_后的8位数字部分TO_DATE(..., 'YYYYMMDD') IS NOT NULL:仅保留能成功转换为有效日期的记录,过滤无效日期格式(如20221301、20220230等)
内容的提问来源于stack exchange,提问作者Francis Edison
相关产品推荐
相关产品推荐

