我有一个字段,它获取的数据包含一个特殊字符类型的撇号,在正常的oracle ascii范围0-127之外。我正在尝试对此进行替换功能,但它一直在切换到?在DDL中。寻找另一种方法来替换
这适用于查询,但在放入视图的DDL时会切换
regexp_replace(field_name,'’',chr(39))
切换到
regexp_replace(field_name,'?',chr(39))
转储函数显示oracle将撇号存储为ascii 226,128,153的三个字符。我尝试在那些串联中编写替换,但这也不起作用。
答案 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));