SQL 函数过滤掉以 'ABC' 或任意三个字母开头的列值

SQL function to filter out column values that start with 'ABC' or any three letters

我正在尝试调整 SQL 查询以过滤掉特定列中的值以三个字母开头的所有行。例如,在下面显示的屏幕截图中,我希望查询到 return 的唯一行是第 11 行:(13, '0511:15', 'FT20')。我可以使用 DB2 中的函数来完成此操作吗?

我的简单查询是:

select pat.f1, hos.hpid, hos.hpcd
from patall3 pat
join hospidl1 hos on pat.f1=hos.hpacct
order by pat.f1;

我对 DB2 一点都不熟悉,但我希望有一种方法可以实现这一点。有什么建议吗?

您可以使用 TRANSLATE 函数来确定 LEFT( LTRIM( hos.hpid ), 3 ) 是否包含字母。

按以下方式调用 TRANSLATE 函数会将输入字符串中的所有大写字母替换为字母 A:

TRANSLATE( inputString, 
   'AAAAAAAAAAAAAAAAAAAAAAAAA', 
   'BCDEFGHIJKLMNOPQRSTUVWXYZ'
)

以下是如何限制 TRANSLATE 函数只计算列的前三个字符:

select pat.f1, hos.hpid, hos.hpcd
from patall3 pat
join hospidl1 hos on pat.f1=hos.hpacct
where TRANSLATE( 
    LEFT( LTRIM( hos.hpid ), 3 ),
    'AAAAAAAAAAAAAAAAAAAAAAAAA', 
    'BCDEFGHIJKLMNOPQRSTUVWXYZ'
 ) <> 'AAA'
order by pat.f1;
;

该查询将只阻止包含前三个字符 all 的字母的值('AAA'、'AAB'、'AAC'、 ETC。)。如果您希望阻止前三个字符中 any 中包含字母的行,请改用此查询:

select pat.f1, hos.hpid, hos.hpcd
from patall3 pat
join hospidl1 hos on pat.f1=hos.hpacct
where TRANSLATE( 
    LEFT( LTRIM( hos.hpid ), 3 ),
    'AAAAAAAAAAAAAAAAAAAAAAAAA', 
    'BCDEFGHIJKLMNOPQRSTUVWXYZ'
 ) NOT LIKE '%A%'
order by pat.f1;
;