修剪 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() 来删除两边的空白。
我正在尝试删除出现在 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() 来删除两边的空白。