Sql查询字段内的一个字

时间:2010-11-13 08:51:52

标签: sql

我有一个名为“愿意”的数据库字段,其填充的文字如下:

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

我需要sql查询来查询里面有“购物”的文件?

TY

7 个答案:

答案 0 :(得分:1)

您可以使用LIKE运算符来实现此目的。例如,

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

但是,如果该字段只是存储以逗号分隔的标记列表,则可能需要更改模式 - 就目前而言,模式未规范化。例如,该表可以包含具有相应外键的UserIdWillingnessTagId列。

答案 1 :(得分:1)

从table1中选择*,其中愿意为'%shopping%'

答案 2 :(得分:1)

非常低效,因为这应该是normalized,但应该有效:

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

在规范化数据库中,您将拥有一个意愿表,其中包含每个(对于购物而言为1)和此查找表的foreign key的ID。然后查询会更有效:

SELECT * 
FROM table
WHERE willingness_id = 1

答案 3 :(得分:1)

这就是我们规范化的原因。

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

答案 4 :(得分:0)

这应该足够了:

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

这将在sql server中运行

答案 5 :(得分:0)

这应该是JOB:

select willingness from table where willingness LIKE '%shopping%'

我建议你阅读MYSQL语句中的字符串比较: http://dev.mysql.com/doc/refman/5.0/fr/string-comparison-functions.html

我假设您使用的是MySQL,如果没有,请告诉我们您使用的是什么。

答案 6 :(得分: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"之类的查询。就是这样 - 更安全,也可能更快。