繁体   English   中英

如何从PostgreSQL的字符串中删除不间断空格?

[英]How do I remove no-break spaces from a string in PostgreSQL?

因此,我有一列incarceration_date,它实际上是一个文本字段,我想将其转换为日期。 通常没有问题,但此列中的每个值似乎在末尾都有一个不间断空格(&#160),这当然会使日期函数出错。

我尝试了两种不同的方法来解决此问题,但均未成功。

尝试1:

trim(both chr(65279) from incarceration_date)::DATE

尝试2:

regexp_replace(incarceration_date, '\s+$', '')::DATE

我认为第二次尝试失败了,因为[[:space:]]不包含零宽度的不间断空格。

在这种特殊情况下,字段的宽度都相同,因此我可以通过仅将前十个字符传递给date函数来解决此问题。 但是,我确实有一些用于导入数据的通用文本清除功能,希望它们能够处理此字符。

示例字符串如下所示:

"06/17/2011 "

但是我不确定问题字符是否正确复制到SO。

我正在使用PostgreSQL-9.5.0。

通过encode(incarceration_date :: bytea,'hex')输出的incarceration_date列的一行输出为:

30362f31372f32303131c2a0

所有行都以c2a0

服务器编码为UTF8。

正如@ThiefMaster所说,最好删除数字和斜杠以外的任何内容 ,以防万一您在该字段中有其他垃圾:

regexp_replace(incarceration_date, '[0-9/]', '')::DATE

另外,为了提高性能,如果您知道日期将始终采用DD/MM/YYYY格式,则just use left(incarceration_date, 10) ,甚至使用incarceration_date::char(10)

我也遇到了删除不间断空格的相同问题。

这将显示不间断字符,查找“ C2 A0”

encode(convert_to(>>your_field<<, 'UTF-8'), 'hex')

我正在使用此功能删除“ C2 A0”字符:

regexp_replace(>>your_field<<,'\xa0','')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM