0

我有一列包含 NO-BREAK SPACE (\xC2\xA0) 而不是 SPACE,我需要找到那些行。

复制粘贴作品:

SELECT PRODUCT_NAME
FROM TABLE t
WHERE PRODUCT_NAME LIKE '% %'

但使用代码点不会:

SELECT PRODUCT_NAME
FROM TABLE t
WHERE PRODUCT_NAME LIKE '%\xC2\xA0%'

如何通过 \x 代码点找到列包含此类符号的行?

4

2 回答 2

0

尝试

WHERE regexp_Like(PRODUCT_NAME, UNISTR('\00A0')) 

根据您的数据库字符集,您可以尝试CHR(106)而不是UNISTR('\00A0')

xC2 xA0不是代码点,它是以UTF-8 编码的 Unicode 字符(No-Break Space)的二进制表示。U+00A0Unicode代码点U+00A0或 160(十进制)

于 2022-01-06T11:29:12.637 回答
0

Exasol 不支持 \x 转义序列。“\xC2\xA0”不是码位,而是码位U+00A0(十进制160)的UTF-8编码。有关详细信息,请参阅https://www.compart.com/en/unicode/U+00A0

但是,您可以使用UNICODECHR(...)

SELECT PRODUCT_NAME
FROM TABLE t
WHERE PRODUCT_NAME LIKE '%'||unicodechr(160)||'%'

请注意,您必须给它十进制 unicode 代码点。不是 UTF-8 编码。您可以使用select to_number('00A0', 'XXXX');将十六进制转换为十进制。

如果您绝对需要使用 \x 转义序列,您可以创建一个 UDF。有关更多信息,请参阅https://docs.exasol.com/7.1/database_concepts/udf_scripts.htm

于 2022-01-10T08:05:00.133 回答