为什么Postgres 9.3中的trim函数无法正常工作?

3
我们希望在Postgres 9.3中对resource列进行前后空格修剪,这似乎是一项简单的工作。以下是SQL语句:
update tablename set resource=trim(resource);

查询在Postgres管理工具SQL屏幕上成功执行。然而,空格没有被修剪。接着,我们通过指定ID执行了该SQL:

update tablename set resource=trim(resource) where id=723;

它返回了:

Query returned successfully: one row affected, 12 ms execution time.

然而结果却一样,没有更新。在终端窗口中执行了相同的SQL语句,但什么也没有发生。
为什么这里的trim没有起作用呢?

1
你确定这些字符是普通的空格吗?或者你可能有一个触发器阻止了更新。 - Wolph
有趣。在应用程序中编辑记录时,会出现2个尾随空格,可以将它们删除。您可能是正确的,这可能不是可以通过TRIM修剪的空格。如果那些不是空格,那么可能是什么呢?顺便说一下,Rails .strip可以删除它们(如果不熟悉Rails,请忽略此信息)。 - user938363
1个回答

6

大概,你看到的字符并不是真正的空格。你可以使用以下代码查看它的ASCII码:

select ascii(left(resource, 1))
from tablename
where id = 723;

如果您只想去掉第一个字符,可以这样做:
update tablename
    set resource = substring(resource from 2)
    where id = 723;

当运行ascii(right(resource,1))时,它返回9,这是一个制表符。当运行ascii(right(resource,2))时,它返回32,这是一个空格。 - user938363
以下代码删除了末尾的非字符:update onboard_data_uploadx_user_accesses set resource=regexp_replace(resource, '\W+', '') where id=723; - user938363
1
@user938363 trim 默认只会移除空格(ascii #32),而不是所有的空白字符。你可以添加参数来移除指定的字符,或者使用正则表达式,例如 ^\s+\s+$\W+ 可以移除列中任何位置的非单词字符)。 - pozs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接