确定值的语言:阿拉伯语英语 SQL netezza
Determining the language of a value: Arabic English SQL netezza
如果是阿拉伯语或英语,我需要为列值指定语言,并且我的值有混合语言,它将被视为阿拉伯语
我尝试了下面的代码来区分两种语言,但它没有用,总是给我 Arabic
SELECT SCRIPT, CASE WHEN script like N'[A-Z]%' THEN 'English' ELSE 'Arabic' END AS LANGUAGE
FROM
tbl
例如:
Value
هذا مثال على ذلك
This Is Example
هذا مجرد Examle
يرجى الضغط على الرابط https://www.google.com/
هذا مثال على ذلك 123456
添加语言列后的预期结果
SCRIPT
Language
هذا مثال على ذلك
Arabic
This Is Example
English
هذا مجرد Examle
Arabic
يرجى الضغط على الرابط https://www.google.com/
Arabic
هذا مثال على ذلك 123456
Arabic
尝试使用正则表达式:
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,
(CASE WHEN REGEXP_LIKE(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 post 处理可能有助于更全面解决方案
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
如果是阿拉伯语或英语,我需要为列值指定语言,并且我的值有混合语言,它将被视为阿拉伯语
我尝试了下面的代码来区分两种语言,但它没有用,总是给我 Arabic
SELECT SCRIPT, CASE WHEN script like N'[A-Z]%' THEN 'English' ELSE 'Arabic' END AS LANGUAGE
FROM
tbl
例如:
Value |
---|
هذا مثال على ذلك |
This Is Example |
هذا مجرد Examle |
يرجى الضغط على الرابط https://www.google.com/ |
هذا مثال على ذلك 123456 |
添加语言列后的预期结果
SCRIPT | Language |
---|---|
هذا مثال على ذلك | Arabic |
This Is Example | English |
هذا مجرد Examle | Arabic |
يرجى الضغط على الرابط https://www.google.com/ | Arabic |
هذا مثال على ذلك 123456 | Arabic |
尝试使用正则表达式:
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,
(CASE WHEN REGEXP_LIKE(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 post 处理可能有助于更全面解决方案
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