从SQL中检索使用特定语言的数据

从SQL中检索使用特定语言的数据,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我有一个列,其中包含阿拉伯语和英语两种语言的数据,我想通过标识其uni代码或语言的类型来分别检索它们 Am使用MS SSMS 2012假设您的列是NVARCHAR,因为您有unicode字符,您可以通过比较unicode与非unicode的转换来区分unicode和非unicode。任何不能作为字符使用的字符都将是?,然后相等将失败 SELECT T.TextColumn, IsUnicode = CASE WHEN CONVERT(VARCHAR(100),

我有一个列,其中包含阿拉伯语和英语两种语言的数据,我想通过标识其uni代码或语言的类型来分别检索它们

Am使用MS SSMS 2012

假设您的列是NVARCHAR,因为您有unicode字符,您可以通过比较unicode与非unicode的转换来区分unicode和非unicode。任何不能作为字符使用的字符都将是?,然后相等将失败

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值

我建议您将每个文本的正确语言标记存储在另一列中,这样您就不必每次都执行此检查


请注意,如下文所述,此解决方案不会完全区分英语和阿拉伯语

为语言添加新列看起来是更好的处理方式,但如果您没有其他选择,您可以在where子句中使用正则表达式来区分阿拉伯语和英语

--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 .]%'


更新您的问题添加相关表架构一个适当的数据样本和预期结果您必须有两个独立的列用于两种语言。根据某个条件从数据库中获取数据时会出现什么问题。一个案例陈述就可以了。要做到你要求的,你必须每次扫描所有文本。那是个坏主意。添加另一列以标识语言。Unicode具有可用于标识特定字符的语言的字符范围。您需要检查字符串中的每个字符,以确定所有字符是来自US-ASCII还是其他范围。但是T-SQL没有这样的函数。它们在C、Python、R等语言中可用。您可以在C中创建SQLCLR函数,但性能会非常差。在加载数据时,将语言存储在单独的列中、对其编制索引并在WHERE子句中使用所需的语言会容易得多。这只能说明字符串是否仅包含US-ASCII。或者更确切地说,如果文本与服务器的排序规则匹配与否,正如CONVERTVARCHAR100将使用该排序规则转换为Varchare一样,是否没有需要nvarchar的英语字符?例如,关于café呢?这两个评论都是正确的,我将把答案留作建议。@DaleBurrell仔细考虑你的假设。英文文本是否包含表情符号?