用普通撇号替换特殊字符撇号

时间:2015-10-02 16:08:14

标签: sql oracle

我有一个字段,它获取的数据包含一个特殊字符类型的撇号,在正常的oracle ascii范围0-127之外。我正在尝试对此进行替换功能,但它一直在切换到?在DDL中。寻找另一种方法来替换

这适用于查询,但在放入视图的DDL时会切换

regexp_replace(field_name,'’',chr(39))

切换到

regexp_replace(field_name,'?',chr(39))

转储函数显示oracle将撇号存储为ascii 226,128,153的三个字符。我尝试在那些串联中编写替换,但这也不起作用。

1 个答案:

答案 0 :(得分:1)

首先,检查包含奇怪撇号的原始数据。我不相信它确实是三个角色。使用此:

select value
, substr(value, 5, 1) one_character
, ascii(substr(value, 5, 1)) ascii_value
from table;

这会将第5个字符与列值及其ascii值隔离开来。将5调整到奇怪的撇号所在的位置。

当你有ascii值时,使用这样的普通replace来摆脱它(regexp_replace似乎有点过分):

replace(value, chr(ascii_value_of_weird_apostrophe), chr(39));