Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle中SQL列值中的隐藏字符_Sql_Regex_Oracle_Replace_Trim - Fatal编程技术网

oracle中SQL列值中的隐藏字符

oracle中SQL列值中的隐藏字符,sql,regex,oracle,replace,trim,Sql,Regex,Oracle,Replace,Trim,我在一个表的列中有一个值,不知何故在字符串的末尾有一些隐藏字符。我看不见它,也看不到它。绳子放在下面。我可以在这个字符串中看到的字符总数是25个,但是当我检查它显示为26的字符串的长度时。我尝试了修剪功能,但认为它可能是一个空间,但它不是。如何在oracle查询中从字符串中删除此类字符。实际上,我正在使用regexp_replace替换这个字符串的某些部分,但是由于这个问题,regex无法匹配字符串中的最后一个数字来替换它之前的所有内容 28/110/41492/171486/98122 这是我

我在一个表的列中有一个值,不知何故在字符串的末尾有一些隐藏字符。我看不见它,也看不到它。绳子放在下面。我可以在这个字符串中看到的字符总数是25个,但是当我检查它显示为26的字符串的长度时。我尝试了修剪功能,但认为它可能是一个空间,但它不是。如何在oracle查询中从字符串中删除此类字符。实际上,我正在使用regexp_replace替换这个字符串的某些部分,但是由于这个问题,regex无法匹配字符串中的最后一个数字来替换它之前的所有内容

28/110/41492/171486/98122

这是我的正则表达式函数

regexp_replace(trim(ATTRIBUTE_VALUE), '(^|.*?/)' || '98122' || '(/|$)', 'replaced' || '\2', 1, 1)
分两步执行此操作:

  • 删除所有不可打印的字符
  • 应用你的替换模式
  • 这是:

    regexp_replace
    (
      regexp_replace(attribute_value, '[^[:print:]]'), -- printable string
      '(^|.*?/)' || '98122' || '(/|$)', -- search pattern
      'replaced' || '\2',  -- replace pattern
      1, -- position
      1 -- occurrence
    )
    

    您可以使用
    从…
    中选择转储(属性值)查看字符代码。这是我在那里看到的:Typ=1 Len=26:50,56,47,49,49,48,47,52,49,52,57,50,47,49,55,49,52,56,54,47,57,56,49,50,50,2是的,
    \x02
    =文本的开头(STX)在末尾。您可以将
    (/|$)
    替换为
    ”(/|[^[:print:][]*$)
    ,该字符将被匹配并捕获到组2中。四十和五十是数字的ASCII码。2不是。所以这是最后一个角色。您可以这样删除它:
    updatemytable set attribute\u value=substr(attribute\u value,1,25),其中…
    。2表示最后一个字符??它是如何输入到列值的?我可以在regex_replace中使用这个substr吗?我需要在更新查询期间动态地执行此操作。