修剪 DB2 中 Char 列中的空格

Trimming Blank Spaces in Char Column in DB2

我正在尝试删除出现在 DB2 的 CHAR 列中的空白 space。我在这里得到了一些关于函数 TRANSLATE 的帮助,以确定 Left 是否包含以三个字母开头的记录:

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

但是正如您在我的屏幕截图中看到的那样,仍有一些记录保留下来,大概是因为它们以空白开头 space。我试过 cast (hos.hpid as varchar) 但这不起作用。是否可以 trim 这些空白 spaces?

谢谢,

在LEFT()

前使用LTRIM()或TRIM()到trim空格
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; 

请注意,在 WHERE 子句中使用此类函数意味着性能会受到影响。至少,查询引擎必须进行全索引扫描;它可能会进行完整的 table 扫描。

如果这是一次性的事情或小事 table,那没什么大不了的。但是,如果您需要经常在大型 table 上执行此操作,请查看您的平台和 DB2 版本是否支持索引中的表达式...

create index myindex on hospidl1 
  ( TRANSLATE( 
LEFT( TRIM(hpid), 3 ),
'AAAAAAAAAAAAAAAAAAAAAAAAA', 
'BCDEFGHIJKLMNOPQRSTUVWXYZ'
 ) );

在最新版本的 db2 中,您也可以只使用 trim() 来删除两边的空白。