所以我有一个列,incorporation_date,这实际上是一个文本字段,我想把它转换为日期。通常没有问题,但似乎这个列中的每个值都在末尾有一个不间断的空格( ),这当然会使日期函数出错。
我试过两种不同的方法来解决这个问题,但都没有成功。
尝试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。
2条答案
按热度按时间kdfy810k1#
我也有同样的问题,以消除非中断空间。
这将显示非中断字符,查找“C2 A0”
字符串
我正在使用这个函数删除“C2 A0”字符:
型
uoifb46i2#
正如@ThiefMaster所说,你最好删除 * 除了数字和斜杠之外的任何东西 *,以防万一你在字段中有任何其他垃圾:
字符串
或者,为了提高性能,如果您知道日期的格式总是像
DD/MM/YYYY
,那么just use left(incarceration_date, 10)
,甚至incarceration_date::char(10)
。