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

如何在Snowflake中查找非utf8字符的行?

晋言
2023-03-14
问题内容

在我的雪花数据库中,一个表具有非utf8字符。我如何在它上面创建仅包含utf8字符的视图;通过排除非utf8字符的行还是替换它们?谢谢


问题答案:

应该可以使用以下测试来检查非utf:

MY_STRING IS NOT NULL AND TRY_HEX_DECODE_STRING(HEX_ENCODE(MY_STRING)) IS NULL

但是那时我没有数据可以测试。
要将字符串重新编码为utf-8,可以使用JavaScript函数:

CREATE OR REPLACE FUNCTION TO_UTF8(BINARY_TEXT BINARY)
RETURNS TEXT LANGUAGE JAVASCRIPT STRICT IMMUTABLE AS '
  var win1252 = [ /* C1 controls */
    8364,  129, 8218,  402, 8222, 8230, 8224, 8225,
     710, 8240,  352, 8249,  338,  141,  381,  143,
     144, 8216, 8217, 8220, 8221, 8226, 8211, 8212,
     732, 8482,  353, 8250,  339,  157,  382,  376
  ];
  return String.fromCharCode(
    ...Array.from(BINARY_TEXT).map(x => (x < 128 || x > 159) ? x : (win1252[x - 128]))
  ); /* .map(...) can be removed if no conversion from win1252 needed */
';

SELECT NVL(TRY_HEX_DECODE_STRING(HEX_ENCODE(MY_STRING)),
           TO_UTF8(HEX_ENCODE(MY_STRING)::BINARY));


 类似资料:
  • 问题内容: 我有一些来自json文件的文本。在本文中,我应用了UTF8编码,但是该编码器无法识别非标准字符,并且为大写字符,是否有一种方法可以净化我的字符串? 我的功能: 问题答案: 我找到了解决方案。 UTF8采用8位表ASCII表,而UTF16采用16位ASCII表,解决方案很简单,只需将函数修改为:

  • 问题内容: 我在从字符串中删除非utf8字符时出现问题,这些字符无法正确显示。像这样的字符0x97 0x61 0x6C 0x6F(十六进制表示) 删除它们的最佳方法是什么?正则表达式还是其他? 问题答案: 使用正则表达式方法: 它搜索UTF-8序列,并将其捕获到组1中。它还与无法标识为UTF-8序列的一部分的单个字节匹配,但不捕获这些字节。替换是捕获到组1中的任何内容。这将有效删除所有无效字节。

  • 问题内容: 我正在使用从Excel导入一些数据的MySQL数据库。数据包含非ASCII字符(破折号等)以及隐藏的回车符或换行符。有没有办法使用MySQL查找这些记录? 问题答案: 这完全取决于您定义为“ ASCII”的内容,但是我建议尝试这样的查询变体: 该查询将返回columnToCheck包含任何非字母数字字符的所有行。如果还有其他可接受的字符,请将其添加到正则表达式中的字符类。例如,如果句点

  • 问题内容: 在基于nodejs / express的应用程序中,我需要处理GET请求,其中可能包含使用iso-8859-1字符集编码的变音符号。 不幸的是,它的querystring解析器似乎只能处理纯ASCII和UTF8: 是否有隐藏的选项或其他干净的方法也可以与其他字符集一起使用?默认行为的主要问题是,我没有办法知道是否存在解码错误-毕竟,输入 本来可以 只是简单地解码为仍然看起来像urlen

  • 我通过导入收到了一个未知字符编码的字符串。如何在浏览器中显示这样的字符串,以便将其复制为PHP代码? 我想用一个例子来说明这个问题。 与var_导出一起交付的字符串与原始字符串不匹配。所有无法识别的字符都将替换为� 象征该字符串仅在此处使用mb_convert_编码生成,用于测试目的。这里的字符编码是已知的。实际上,它来自导入,例如,带有文件内容()的导入,字符编码未知。 我所期望的具有改进的va

  • 问题内容: 在 java 中查找字符串中的第一个非重复字符? 问题答案: 有多种方法可以找到它。 他们之中有一些是: 使用LinkedHashMap 使用 indexOf 和 lastIndexOf 方法。 面试问题之一是“你将如何在 String 中找到第一个非重复字符。” 例如: 如果输入字符串是“analogy”,那么程序应该返回’n’ 如果输入字符串是“easyest”,那么程序应该返回’