SQL怎么查询出字段中等于某一个数字的记录?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL怎么查询出字段中等于某一个数字的记录?相关的知识,希望对你有一定的参考价值。

例如数据表:
id value

1 1,3,45,7,9
2 2,4,6,8,10
3 6,2,8,1,24
4 2,19,8,7,4,6
5 23,14,25,5,17
6 31,55,59,5,4
--------------------------------

-- 表的结构 `test`

CREATE TABLE IF NOT EXISTS `test` (

`id` int(11) NOT NULL AUTO_INCREMENT,
`value` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

-- 转存表中的数据 `test`

INSERT INTO `test` (`id`, `value`) VALUES

(1, '1,3,45,7,9'),
(2, '2,4,6,8,10'),
(3, '6,2,8,1,24'),
(4, '2,19,8,7,4,6'),
(5, '23,14,25,5,17'),
(6, '31,55,59,5,4');
------------------------------------------------

我想select出 value中含有的数字等于4的所有记录(当然不等于45,24,14这些的,得出结果是第2、4、6条)。sql语句怎么写?

SELECT [value] FROM [test] where INSTR( [value], ',4,' )>0
你这张表中最好不要使用关键字作为表的字段名字比如value
mysql中INSTR函数的用法
INSTR(字段名, 字符串)
这个函数返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始)
参考技术A select * from test where value like '%,4' or value like '%,4,%' or value like '4,%';

这样???
分4在字段前,中,后三种???用regexp更好?
参考技术B select * from test where id = 4 or value = 4; 应该是这样吧?追问

比如第6条: value=”31,55,59,5,4“,含有5个数字分别是31,55,59,5,4。其中有一个数字等于4。

你value = 4。难道要”31,55,59,5,4“=4?

追答

嗯,听你这么一说我的又好像不对了 怎么创建表有语法错误

SQL某一表中重复某一字段重复记录查询与处理

1.查询出重复记录
 
 select 重复记录字段 form  数据表 group by  重复记录字段 having count(重复记录字段)>1


2.重复记录只显示一条ID值最小或最大的记录

 select   id,* from   数据表 where houseno (select 重复记录字段 form 数据表 group by 重复记录

字段 having count(重复记录字段)>1 )


这样把houseno重复的的ID值全部显示出,那么我们如何只显示一条id最小或最大的记录呢?

关键是在上面sql的where子句中select 重复记录字段 form 数据表 group by 重复记录字段 having count(

重复记录字段)>1
修改为
select min(id) form 数据表 group by 重复记录字段 having count(重复记录字段)>1

这样就查询重复记录字段中ID最小值

那么上面的语句就是

  select   id,* from   数据表 where houseno (select min(id) form 数据表 group by 重复记录字段

having count(重复记录字段)>1 )


3.至于对重复记录执行delete update 就非常简单啦

  例如只保留最小id的一条
   
   delete 数据表 where id in (select max(id ) from 数据包 group by 重复记录字段 having count(重

复记录字段)>1)
 
 
 update 操作不说啦都一样。


4.group by  字段 having count与distinct的区别

distct查询显示全部字段值都是一样的唯一,一条记录

 例如
id     name   sex
43 111 1
44 111 1
45 111 2
46 222 2
47 222 2
48 333 1
49 333 1

SELECT distinct
      [name]
      ,[sex]
  FROM [database].[dbo].[a]

要想实现上面的要去掉 sex字段 改成

SELECT distinct
      [name]
     
  FROM [database].[dbo].[a]


但要想取得重复ID最小值不建议用distinct。
总结:


 对于重复记录关键是查出 :采用group by 字段 having count(字段)>1 
 取得最小id的一条(很关键) :采用min(id)
































以上是关于SQL怎么查询出字段中等于某一个数字的记录?的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句查询:查询满足第1个字段等于某值且第2个字段大于某值的所有记录中,统计第3个字段的平均值。

mysql如何查询某字段里两个值相加结果等于已知道的一个数字

SQL中如何精确判断某字段含有某个值?

mysql 查询某一字段值不等于某个字符串的记录

如何用sql查询某值类型字段各个记录中含有的特定数字?

sql语句包含怎么写