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

时间:2016-04-05 18:33:20

标签: postgresql postgresql-9.5

所以我有一个专栏,incarceration_date,实际上是一个文本字段,我想把它作为日期投射。通常没问题,但似乎这一列中的每个值都有一个不间断的空格(&#160),当然这会使日期函数出错。

我尝试了两种不同的方法来解决这个问题。

尝试1:

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

尝试2:

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

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

在这个特定的实例中,字段都具有相同的宽度,因此我可以通过将前十个字符传递给日期函数来解决此问题。但是,我确实有一些我在导入数据上使用的通用文本清理函数,我希望它们能够处理这个字符。

示例字符串如下所示:

"06/17/2011 "

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

我正在使用PostgreSQL-9.5.0。

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

30362f31372f32303131c2a0

所有行都以c2a0结尾。

服务器编码为UTF8。

2 个答案:

答案 0 :(得分:0)

正如@ThiefMaster所说,除了数字和斜线之外你最好除去之外的任何,以防你在该字段中有任何其他垃圾:

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

或者,为了提高效果,如果您知道日期的格式始终为DD/MM/YYYY,则为just use left(incarceration_date, 10),甚至incarceration_date::char(10)

答案 1 :(得分:0)

我也有同样的问题去除不间断的空格。

这将显示非中断字符,查找" C2 A0"

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

我正在使用此功能删除&#34; C2 A0&#34;字符:

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