如果表Atable中的a字段内容是1,2,3 的格式(a字段是用,分隔的),要查询该字段是否包含1则可以用find_in_set 例:
SELECT * FROM Atable WHERE find_in_set(1,a)
如果表Atable中的a字段内容是1,2,3 的格式(a字段是用,分隔的),要查询该字段是否包含1则可以用find_in_set 例:ida11,2,321111,11SELECT * FROM Atable WHERE find_in_set(1,a)结果| id | a ||–|--|| 1| 1,2,3 |...
前段时间项目中使用到My
sql
的FIND_IN_
SET
函数,感觉挺好用的。过一段时间,老大找到我说,这个需要改为IN,哈哈,只能改了,原因会在下面分析到!
弄个测试表来说说两者的区别,测试数据直接在问答区copy一份,能说明问题就行,哈哈,如果侵犯您的版权还请见谅,互联网吗,就需要分享!
测试代码:
CREATE TABLE `test` (
`id` int(8) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`list` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
这是我最近新接触到的
一个
函数,
我在项目中的使用场景是这样的:
有
一个
应用类型表,表中有parentId字段和parentIds字段,前者为父级id,后者为多级父级id,在库中都是varchar类型,parentIds由多个父级id拼接而成由”,”分隔.
组长告知我可以使用该函数,就去进行了了解与使用.
FIND_IN_
SET
(str,strlist)
假如字符串str在由多个子链组成的字符串列表strlist中,则返回值的范围在1到N之间。
一个
字符串列表就是
一个
由一些被‘,’符号分开的自链组成的字符串。
如果第
一个
参数是
一个
常数字符串,而第二个是type
SELECT COUNT(*) FROM "messages" WHERE NOT (3 = ANY (recipient_ids))
如果你用的是 node.js 的 pg 包,值在
数组中
可以这样写:
var ids = [1,3,4];
MH=> create table test2(id int,while_list text[]);
CREATE TABLE
MH=> insert into test2 values(1,'{aa,bb,cc}');
INSERT 0 1
MH=> select * from test2;
id | while_list
----+------------
spark.
sql
("select id, array_field from tmp_v where array_contains(array_field, 'hello')").show(200, false)
参考:https://spark.apache.org/docs/latest/api/
sql
/#array
查询嵌套数组
如果
一个
表
包含
STRUCT 的 ARRAY,则可展平 ARRAY 以查询 STRUCT 的字段。您也可以展平 STRUCT 值的 ARRAY 类型字段。
查询 ARRAY 中的 STRUCT 元素
以下示例将 UNNEST 与 CROSS JOIN 结合使用,以展平 STRUCT 的 ARRAY。
WITH races AS (
SELECT "800M" AS race,
[STRUCT("Rudisha" as name, [23.4, 26.3, 26.4, 26.1] a
很多时候我们在设计数据库时有这种情况,比如: 有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 …..11,12,13等等 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1,3,4的格式存储. 那们我们如何用
sql
查找所有type中有4图文标准的文章呢, 这就要我们的find_in_
set
出马的时候到了. 先看my
sql
手册中find_in_
set
函数的语法: FIND_IN_
SET
(str,strlist) 假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。
一个
字符串列表就是
一个
由一些被
SELECT * FROM s_form sf
where json_contains(sf.target_type,CONCAT('"',#{targetType},'"'))
数据库的字段为
需要查询target_type中
包含
’COUNTY’元素的数据
sql
语句为:
SELECT * FROM s_form sf
where json_contains(sf.target_ty
SQL
语句支持这样的:
select * from 表名 where 列名 in (value1,value2,value3,value4)
但是如果是
一个
List数组,我们无法得知括号里面具体该写多少个值
则可以按照以下方法转换:
String _sum=null;
for (int i = 0; i < list.Count; i++)
如果你想在 My
SQL
数据库中对
一个
字段进行反向查询,即查询该字段不
包含
某个值的记录,可以使用 `NOT FIND_IN_
SET
` 函数。
例如,假设你有
一个
名为 `tags` 的字段,其中
包含
逗号分隔的标签列表,你想要查询不
包含
标签 "my
sql
" 的记录,你可以这样写
SQL
查询语句:
```
sql
SELECT * FROM table_name WHERE NOT FIND_IN_
SET
('my
sql
', tags);
这将返回 `table_name` 表中不
包含
标签 "my
sql
" 的所有记录。注意,`NOT FIND_IN_
SET
` 函数只适用于逗号分隔的列表字段。如果你的字段中
包含
其他分隔符,你需要使用其他方法来解析它们。