Teradata表列尾随空格去除失效,咨询正确实现方法
在Teradata中去除列的尾随空格
我之前也碰到过一模一样的情况!你写的两种TRIM语法本身是没问题的,但大概率是因为你的dbname列是CHAR类型(固定长度),这才导致看起来去除空格没生效。
为什么会这样?
Teradata里的CHAR(n)类型会自动将存储的内容补空格到指定长度n。就算你用TRIM去掉了尾随空格,查询结果如果还是CHAR类型的话,数据库又会自动把空格补回去,所以你看到的结果好像没变化。
正确的解决方法
1. 查询时显示无空格的结果
只需要把TRIM后的结果转换成VARCHAR类型就行,这样就不会自动补空格了:
-- 只去除尾随空格 CAST(TRIM(trailing FROM dictionary_managed_databases.dbname) AS VARCHAR(100)) AS trimmed_dbname -- 如果你想同时去除首尾空格,用不带参数的TRIM也可以 CAST(TRIM(dictionary_managed_databases.dbname) AS VARCHAR(100)) AS trimmed_dbname
注意把VARCHAR(100)里的100换成你实际列的长度。
2. 永久修改表中的数据
如果想彻底把列里的尾随空格去掉,最好先把列的数据类型改成VARCHAR(因为CHAR类型本身就会强制补空格),然后再更新数据:
-- 第一步:修改列类型为VARCHAR ALTER TABLE dictionary_managed_databases MODIFY COLUMN dbname VARCHAR(原CHAR长度); -- 第二步:更新数据去除尾随空格 UPDATE dictionary_managed_databases SET dbname = TRIM(trailing FROM dbname);
这样之后再查询,就不需要每次都TRIM了。
另外补充下:如果你的列本来就是VARCHAR类型,那你原来的两种写法应该是有效的,可能是测试时没注意到特殊情况(比如数据里的不是普通空格而是其他空白字符),但先排查CHAR类型的问题最靠谱。
内容的提问来源于stack exchange,提问作者tonyibm
相关产品推荐
相关产品推荐

