确定值的语言:阿拉伯语 英语 SQL netezza

问题描述

如果是阿拉伯语或英语,我需要指定列值的语言,并且我的值具有混合语言,它将被视为阿拉伯语

我尝试了下面的代码来区分两种语言,但没有用,总是给我 Arabic

SELECT SCRIPT,CASE WHEN script like N'[A-Z]%' THEN 'English' ELSE 'Arabic' END AS LANGUAGE
FROM
    tbl

例如:

价值
هذا مثال على ذلك
这是例子
هذا مجرد 示例
يرجى الضغط على الرابط https://www.google.com/
هذا مثال على ذلك 123456

添加语言列后的预期结果

脚本 语言
هذا مثال على ذلك 阿拉伯语
这是例子 英文
هذا مجرد 示例 阿拉伯语
يرجى الضغط على الرابط https://www.google.com/ 阿拉伯语
هذا مثال على ذلك 123456 阿拉伯语

解决方法

尝试使用正则表达式:

SELECT SCRIPT,(CASE WHEN REGEXP_LIKE(script,N'^[A-Z]'
             THEN 'English' ELSE 'Arabic'
        END) AS LANGUAGE
FROM tbl

我不相信 Netezza 扩展 LIKE 以支持字符范围。以上是一个正则表达式,用于检查第一个字符是否在 A-Z 范围内。我不确定这是确定您想要什么的最佳方式;但考虑到逻辑,您可能还想检查小写。

编辑:

如果你想要英语字符,你可以这样做:

SELECT SCRIPT,N'^[A-Za-z0-9 ]+$'
             THEN 'English' ELSE 'Arabic'
        END) AS LANGUAGE
FROM tbl

如果您关心标点符号,您可能希望包含其他字符。

,

如果第一个字符是语言的指示符,那么更全面的方法是检查您的专栏的语言。

SELECT c1,CASE 
         WHEN unicode(c1) BETWEEN String_to_int('600',16) AND string_to_int('6FF',16)
              OR unicode(c1) BETWEEN string_to_int('750',16) AND string_to_int('77F',16)
              OR unicode(c1) BETWEEN string_to_int('8A0',16) AND string_to_int('8FF',16)
              -- add more unicode range checks here
          THEN 'Arabic' 
          ELSE 'English' 
       END AS language 
FROM  ... ; 

这将导致

                      C1                       | LANGUAGE
-----------------------------------------------+----------
 هذا مثال على ذلك                              | Arabic
 This Is Example                               | English
 هذا مجرد Examle                               | Arabic
 يرجى الضغط على الرابط https://www.google.com/ | Arabic
 هذا مثال على ذلك 123456                       | Arabic

如果用例是一个以 Latin9 / Ascii 开头的字符串,然后有其他 unicode 字符,那么使用 the unicodes function 非非 sql 后处理可能有助于更全面的解决方案

 select unicodes(c1,32,'hex') from ..;

会给 -

000647 000630 000627 000020 000645 00062B 000627 000644 000020 000639 000644 000649 000020 000630 000644 000643
 000054 000068 000069 000073 000020 000049 000073 000020 000045 000078 000061 00006D 000070 00006C 000065
 000647 000630 000627 000020 000645 00062C 000631 00062F 000020 000045 000078 000061 00006D 00006C 000065
 00064A 000631 00062C 000649 000020 000627 000644 000636 00063A 000637 000020 000639 000644 000649 000020 000627 000644 000631 000627 000628 000637 000020 000068 000074 000074 000070 000073 00003A 00002F 00002F 000077 000077 000077 00002E 000067 00006F 00006F 000067 00006C 000065 00002E 000063 00006F 00006D 00002F
 000647 000630 000627 000020 000645 00062B 000627 000644 000020 000639 000644 000649 000020 000630 000644 000643 000020 000031 000032 000033 000034 000035 000036

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...