DB2中对CHAR(32)字段执行SELECT查询时,如何去除尾随空格?
在DB2中去除CHAR(32)字段的尾随空格
嘿,这个问题我太熟了——DB2里的CHAR类型字段会自动用空格填充到定义的长度(比如你这里的32位),所以查询出来默认带一堆尾随空格真的很闹心。下面给你几个靠谱的解决办法,亲测有效:
用
RTRIM()函数(最直接)
这是专门针对右侧(尾随)空格的函数,用法超简单:SELECT RTRIM(your_char_column) AS trimmed_column FROM your_table;它会把字段末尾所有的普通空格都去掉,完全符合你的需求。
用
TRIM()函数(灵活可选)
如果之后你还需要去掉前导空格,TRIM()可以一键处理前后;要是只想针对尾随空格,也可以明确指定:-- 去掉前后所有空格 SELECT TRIM(your_char_column) AS trimmed_column FROM your_table; -- 只去掉尾随空格 SELECT TRIM(TRAILING FROM your_char_column) AS trimmed_column FROM your_table;转换为VARCHAR类型
VARCHAR类型不会自动填充空格,所以把CHAR字段转成VARCHAR后,尾随空格会自动消失:SELECT CAST(your_char_column AS VARCHAR(32)) AS trimmed_column FROM your_table;进阶:创建计算列(一劳永逸)
如果你经常需要查询这个去空格后的字段,可以给表加一个存储型计算列,以后直接查这个列就行:ALTER TABLE your_table ADD COLUMN trimmed_char_col VARCHAR(32) GENERATED ALWAYS AS (RTRIM(your_char_column)) STORED;
小提示
要是你试过上面的方法还是有“空格”,可以用HEX()函数检查一下是不是普通空格:
SELECT HEX(your_char_column) FROM your_table;
普通空格的十六进制是20,如果是其他值(比如全角空格是8140),那你需要用REPLACE()函数替换掉这些特殊字符。
内容的提问来源于stack exchange,提问作者befi




