我有一列,其中包含两种语言的数据(阿拉伯语和英语),我想通过识别其 uni-code或语言的类型来分别检索它们>。
我正在使用 MS SSMS 2012
答案 0 :(得分:0)
假设您的列为NVARCHAR
,因为您具有unicode字符,则区分unicode和非unicode的方法是将其转换与VARCHAR
进行比较。无法作为CHAR
使用的任何字符都将是?
,然后相等将失败。
SELECT
T.TextColumn,
IsUnicode = CASE
WHEN CONVERT(VARCHAR(100), T.TextColumn) <> CONVERT(NVARCHAR(100), T.TextColumn) THEN 1
ELSE 0 END
FROM
YourTable AS T
您可以随意更改比较的长度(此示例适用于100
),只需确保获取足够数量的字符,以便从阿拉伯文本中获取至少1个unicode值。 / p>
我建议您将每个文本的正确语言标签存储在另一列中,这样就不必每次都进行此检查(这是一个繁琐的过程)。
请注意,此解决方案 不会完全区分 英语和阿拉伯语,如下所述。
答案 1 :(得分:0)
为语言添加新列似乎是处理该问题的更好方法,但是您可以在where子句中使用“ like”正则表达式来区分阿拉伯语和英语(如果没有其他选择)。
--to get Arabic names for product
select * from Product where [name] not LIKE '%[a-z0-9 .]%'
--to English names for product
select * from Product where [name] LIKE '%[a-z0-9 .]%'