修剪DB2中Char列中的空格

时间:2015-02-24 14:04:08

标签: casting db2 trim

我试图删除DB2中CHAR列中出现的空格。我在函数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; 

但正如您在我的屏幕截图中看到的那样,有些记录仍然存在,大概是因为它们以空格开头。我试过cast (hos.hpid as varchar),但这不起作用。是否可以修剪这些空格?

Record Example

谢谢,

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

使用LTRIM()或TRIM()在LEFT()

之前修剪空白
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子句中使用此类函数意味着性能将受到影响。至少,查询引擎必须进行完整的索引扫描;它可以进行全表扫描。

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

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