我有一列包含 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 代码点找到列包含此类符号的行?
尝试
WHERE regexp_Like(PRODUCT_NAME, UNISTR('\00A0'))
根据您的数据库字符集,您可以尝试CHR(106)
而不是UNISTR('\00A0')
xC2 xA0
不是代码点,它是以UTF-8 编码的 Unicode 字符(No-Break Space)的二进制表示。U+00A0
Unicode代码点是U+00A0
或 160(十进制)
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。