如果存在子字符串,如何有效地检查:SQL查询

时间:2013-12-27 13:58:37

标签: sql sql-server sql-server-2008

如果列中存在子字符串,我必须根据决定执行某些操作。

例如,我的专栏'LangCodes'有#个分隔值,例如en-us#ar-ae#in-id。

我可以使用SQL in 运算符,如果我可以转换形式的值,如:'en-us','ar-ae','in-id'。

例如select Col1 from Table1 where 'en-us' in (LangCodes)

我是否需要使用SQL的替换功能来完成此操作或存在更好的方法?

2 个答案:

答案 0 :(得分:2)

您无法在SQL Server中有效地执行此操作,因为您以不同于使用关系数据库的方式存储数据。您需要一个包含idLangCode列的单独关联表,每个语言代码只有一行。

可以用字符串操作做你想做的事。这是一种典型的方式:

where '#'+LangCodes+'#' like '%#en-us#%'

但是,这不能利用LangCodes上的索引。

答案 1 :(得分:0)

检查语言代码的最有效和最佳方法是将它们分隔在您的表格中。

永远不要永远不要在一列中存储多个值!

这就是你的表格的样子(只是例子)

product table
-------------
id
name

language_code table
-------------------
id 
name

product_language_code table
---------------------------
product_id
language_code_id