当前位置: 首页 > 面试题库 >

从列中删除替换字符锟

公西星海
2023-03-14
问题内容

根据我到目前为止的研究,此字符表示数据库与前端之间的编码错误。不幸的是,我对这两个都没有任何控制权。我正在使用Teradata Studio。

如何过滤掉这个字符?我正在尝试REGEX_SUBSTR在偶尔包含的列上执行函数锟�,这将引发错误“字符串包含不可翻译的字符”。

这是我的SQL。AIRCFT_POSITN_ID是包含替换字符的列。

 SELECT DISTINCT AIRCFT_POSITN_ID, 
 REGEXP_SUBSTR(AIRCFT_POSITN_ID, '[0-9]+') AS AUTOROW
 FROM PROD_MAE_MNTNC_VW.FMR_DISCRPNCY_DFRL 
 WHERE DFRL_CREATE_TMS > CURRENT_DATE -25

问题答案:

您的诊断是正确的,因此,首先,您可能需要检查 会话字符集 (它是连接定义的一部分)。如果是 ASCII, 则将其更改为 UTF8
,您将能够看到原始字符而不是替代字符。

如果字符确实是数据的一部分,而不仅仅是编码翻译问题的指示:

替代字符AKA SUB (DEC:26十六进制:1A)在Teradata中非常独特。

您不能直接使用-

select  '锟�';

-- [6706] The string contains an untranslatable character.
select  '1A'XC;

-- [6706] The string contains an untranslatable character.

如果您使用的是14.0或更高版本,则可以使用 CHR 函数生成它:

select  chr(26);

如果您的版本低于14.0,则可以这样生成:

select  translate (_unicode '05D0'XC using unicode_to_latin with error);

生成角色后,您现在可以将其与 REPLACEOTRANSLATE一起使用

create multiset table t (i int,txt varchar(100) character set latin) unique primary index (i);

insert into t (i,txt) values (1,translate ('Hello 砖诇讜诐 world 注讜诇诐' using unicode_to_latin with error));
select * from t;

-- Hello 锟斤拷锟斤拷 world 锟斤拷锟斤拷
select otranslate (txt,chr(26),'') from t;

-- Hello  world

select otranslate (txt,translate (_unicode '05D0'XC using unicode_to_latin with error),'') from t;

-- Hello  world

顺便说一句, OTRANSLATEOREPLACE 有2个版本:

  • syslib 下的功能可与 LATIN一起使用
  • TD_SYSFNLIB 下的功能可与 UNICODE一起使用


 类似资料:
  • 问题内容: 我想删除两个字符之间以及字符本身之间的字符串,例如说: 我想替换“#?”之间所有出现的字符串 和“;” 并用字符将其删除。 由此 对此 我怎么能用Java做到呢? 问题答案: 使用正则表达式:

  • 问题内容: 我有一个清单 我正在尝试删除其超字符串已经在列表中的字符串。在这种情况下,结果应为: 我已经写了代码: 但它似乎不起作用。我读过,我们无法在列表上进行迭代时将其删除。因此,副本,而这是我的原始列表。 问题答案: l=[‘abc’,’abcdef’,’def’,’defdef’,’polopolo’] print [j for i, j in enumerate(l) if all(j

  • 问题内容: 这似乎是骗人的,但请放心,事实并非如此-我在SO和网络的其余部分中搜索了我的问题的答案,并最终一遍又一遍地找到同样不足的“解决方案”。无论如何,这是这样的: 我正在将用户输入从文本区域保存到MySQL数据库(在WordPress环境中,但是我认为这对这个问题无关紧要)。稍后从数据库中检索它,以在站点的后端显示给Admins。当用户提交带有换行符的文本时(即按Enter键),就会出现问题

  • 问题内容: 我有一份高中清单。我想从字符串中删除某些字符,单词和符号。 我目前有: 不过,我想用一个列表,以便我能快捷地更换,,,等。 有什么建议? 不起作用 问题答案: 使用正则表达式(用分隔字符串):

  • 问题内容: 我想开发一个只能从字符串中删除数字字符的mysql函数。 问题答案: 您可以编写用户定义的函数,在其中可以编写替换逻辑,也可以尝试:

  • 问题内容: 想要从字符串中删除所有新行。 我有这个正则表达式,它可以捕获所有这些正则表达式,问题是我不知道应该使用哪个函数。 应该变成: 问题答案: 您必须注意双换行符,这会导致双倍空格。使用这个非常有效的正则表达式: 多个空格和换行符替换为一个空格。 编辑: 正如其他人指出的那样,此解决方案存在单词之间匹配单个换行符的问题。这个例子中没有,但是可以很容易地看到这种情况如何发生。一种替代方法是执行