检查单元格中是否存在国家/地区代码

时间:2013-10-16 04:22:30

标签: mysql sql

在用户可以向数据库添加任何内容之前,我正在尝试检查单元格country中是否存在国家/地区代码。因此,如果国家代码不存在,他将无法添加任何内容。

我将国家/地区代码存储为逗号分隔值。列类型为VARCHAR。

"id"    "rtype" "country"
"1"     "0"     "US,UK,SE,CA"
"2"     "1"     "US"
"3"     "2"     "UK"

我运行了以下查询,但这不会产生任何行。哪里出错了?问题是,此查询需要以逗号分隔值和单个值运行。

select id, rtype from test where id=1 and country in('US')

预期结果

id | rType
 1 |   0

select id, rtype from test where id=2 and country in('US')

预期结果

id | rType
 2 |   0

3 个答案:

答案 0 :(得分:3)

试试这个:

SELECT id, rtype FROM test
WHERE FIND_IN_SET('US', country) > 0

这就是FIND_IN_SET(str,strlist)函数的工作原理:

  

如果字符串str位于由N个子字符串组成的字符串列表strlist中,则返回1到N范围内的值。字符串列表是由用“,”字符分隔的子字符串组成的字符串。 [...]如果str不在strlist中,或者strlist是空字符串,则返回0。

答案 1 :(得分:1)

MySQL有一个非常好的Set Datatype。它非常有效,可以存储到255个值的64个不同成员。我不知道你是否可以改变你的列类型,但它可以解决很多问题:

  1. 您的专栏可以编制索引
  2. 您不会错误地存储重复的值
  3. 它将非常有效地存储
  4. 将忽略无效值(如果处于严格模式则会出错)
  5. 删除尾随空格
  6. 您可以使用FIND_IN_SET功能进行搜索。

答案 2 :(得分:0)

由于国家/地区代码是逗号分隔值,因此无法直接使用。 你可以喜欢。

从测试中选择id,rtype,例如'%US%'