2010-11-13 54 views
0

一个字,我有喜欢的文字填入称为意愿数据库字段:SQL查询场内

shopping,pool,pc,games 
shopping,pool,pc,games 
swimming, pool, pc, games 

我需要查询其中有“购物”里面的Fileds SQL查询?

TY

+0

以何种不可用形式存储数据的原因是什么? – zerkms 2010-11-13 08:54:21

+0

它从RSS的现场数据,不是我做的 – webmasters 2010-11-13 09:04:29

+1

所以并分割它,当您解析饲料。 – 2010-11-13 09:05:28

回答

0

,应该是够了:

select * 
from table 
where willingness like '%shopping%' 

这将在SQL Server工作

1

可以使用LIKE运营商用于这一目的。例如,

SELECT * FROM myTable 
WHERE willingness LIKE '%shopping%' 

但是,如果字段被简单地存储逗号分隔的标签列表,您可能需要更改架构,而不是 - 因为它的立场,该模式不被标准化。例如,该表可能有UserIdWillingnessTagId列与适当的外键。

1

SELECT * FROM表1,其中愿意LIKE '%购物%'

1

非常低效的,因为这确实应该是normalized,但应该工作:

SELECT * 
FROM table 
WHERE willingness LIKE '%shopping%' 

在规范化的数据库,你将有一个对于每个(对于购物来说为1)的意愿表和对该查找表的foreign key。那么查询会更高效:

SELECT * 
FROM table 
WHERE willingness_id = 1 
1

这就是为什么我们正常化。

AND (willingness = 'shopping' 
OR willingness like 'shopping,%' 
OR willingness like '%,shopping' 
OR willingness like '%,shopping,%' 
OR willingness like '%, shopping' 
OR willingness like '%, shopping,%') 
0

您不应该像这样将数据存储在数据库中。让我来解释:

您可以使用它的人在这里提到的解决方案(like %shopping%等),但你从字面上找麻烦这种方式。

阅读正常化。取而代之的是willingness场的,你可以有一个willingness表,看起来在某种程度上是这样的:

person_id  willing 

1    pool 
2    shopping 
2    pool 
3    swimming 
3    games 

等等

然后你只需要像select distinct person_id from willingness where willing = "pool"查询。就是这样 - 更安全,可能更快。