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

qaxu7uf2  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(167)

所以我有一个列,incorporation_date,这实际上是一个文本字段,我想把它转换为日期。通常没有问题,但似乎这个列中的每个值都在末尾有一个不间断的空格(&#160),这当然会使日期函数出错。
我试过两种不同的方法来解决这个问题,但都没有成功。
尝试1:

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

字符串
尝试二:

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


我认为第二次尝试失败是因为:space:不包含零宽度无中断空格。
在这个特殊的例子中,字段都是相同的宽度,所以我可以通过只传递前10个字符给日期函数来解决这个问题。然而,我确实有一些通用的文本清理函数,我在导入数据时使用,我希望它们能够处理这个字符。
示例字符串如下所示:

"06/17/2011 "


但我不确定问题字符是否正确复制到SO。
我用的是PostgreSQL-9.5.0。
通过encode(incorporation_date::bytea,'hex')输出的incorporation_date列的一行的输出是:

30362f31372f32303131c2a0


所有行都以c2a0结尾。
服务器编码是UTF8。

kdfy810k

kdfy810k1#

我也有同样的问题,以消除非中断空间。
这将显示非中断字符,查找“C2 A0”

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

字符串
我正在使用这个函数删除“C2 A0”字符:

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

uoifb46i

uoifb46i2#

正如@ThiefMaster所说,你最好删除 * 除了数字和斜杠之外的任何东西 *,以防万一你在字段中有任何其他垃圾:

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

字符串
或者,为了提高性能,如果您知道日期的格式总是像DD/MM/YYYY,那么just use left(incarceration_date, 10),甚至incarceration_date::char(10)

相关问题