【问题标题】:Teradata - Removal of multi spaces to single spaceTeradata - 将多个空间删除为单个空间
【发布时间】:2019-08-27 19:38:54
【问题描述】:

每当在字符串中找到多个空格时,我想将多个空格替换为单个空格。我正在使用这个表达式,但它没有给出想要的结果。数据是否有可能包含一些额外的非 ascii 字符而不是空格。

还缺少什么

我尝试了以下解决方案来更新列 TRIM( REGEXP_REPLACE ( '报告总人员费用的值。', '( )+',' ',1 ,0, 'c' ) ) ;

它没有给出想要的结果。

实际结果:报告人事费用总额。 期望结果:报告人事费用总额。

【问题讨论】:

  • 你看过这个吗? stackoverflow.com/questions/1981349/…是给JS的,但搜索字符串可能适合你。
  • 感谢馄饨,尝试了这个 TRIM( REGEXP_REPLACE('报告总人员费用的值。','[/\s]{2,}',' ',1,0, 'i' ) ),但不工作。使用正常空间它可以工作,但我认为“报告”和“该”之间还有其他东西。
  • 嗯...你可以创建一个小提琴并分享它:refiddle.com 吗?

标签: teradata regexp-replace


【解决方案1】:

[ ]{2,} 将捕获 2 个或更多空格字符,然后替换为单个空格。

SELECT RegExp_Replace('Report   the value of total personnel expense','[ ]{2,}',' '); 

输出:Report the value of total personnel expense

【讨论】:

  • 谢谢你在那个例子中工作..你能弄清楚这个例子中发生了什么..我没有得到想要的结果。 SELECT 'A 部分:收入 1. 利息收入' as col1 , RegExp_Replace('A 部分:收入 1. 利息收入','[ ]{2,}',' ');
  • 不确定您想要的结果是什么?
  • SELECT RegExp_Replace('A部分:收入1.利息收入','[ ]{2,}',' ');收入和数字 1 之间有三个空格。
  • 我认为当我们从这个网页复制和粘贴它的工作。但是在原始表中,如果我运行它它不起作用。所以我觉得剧中有一些不可打印的角色。
  • 我这样做是为了空格.. 两个的 ascii 值为 32,另一个是 ascii 353 -> select ascii(' ');
【解决方案2】:

您可以尝试用一个空格替换连续的空格:

REGEXP_REPLACE (x, '\s+',' ')
--'\s' matches blank, new line, tab, etc.

或者删除额外的空格:

REGEXP_REPLACE (x, '\s\K\s+','') ) ;
-- '\K' drops the previously matched characters from the match

我更喜欢 #1,因为所有空格都被空白替换,而 #2 如果它是匹配中的第一个字符,则会保留制表符/换行符

【讨论】:

    猜你喜欢
    • 2014-10-31
    • 2014-05-20
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2014-10-01
    • 2020-12-03
    相关资源
    最近更新 更多