Loading

Mysql小技巧(多行数据合并+模糊查询

1.多行数据合并

使用GROUP_CONCAT函数后的效果

需注意:

1.GROUP_CONCAT()中的值为你要合并的数据的字段名;

 SEPARATOR 函数是用来分隔这些要合并的数据的;

 ' '中是你要用哪个符号来分隔;

2.必须要用GROUP BY 语句来进行分组管理,不然所有的数据都会被合并成一条记录

 

2.模糊查询

关于条件,SQL提供了四种匹配模式:

1,% :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'

将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。

另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'

若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

2,_ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:

比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;

再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
只找出“三脚猫”这样name为三个字且第一个字是“三”的;


3,[ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'
将找出“张三”、“李三”、“王三”(而不是“张李王三”);

如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
将找出“老1”、“老2”、……、“老9”;

4,[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'
将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;

SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
将排除“老1”到“老4”,寻找“老5”、“老6”、……

5.concat()函数

在实际的使用中,条件是作为参数传递进来的。 所以我们使用 concat() 函数

mybatis:        select * from user where name like concat(“%”, #{name},”%”) 

3.多列数据合成一列

多列合并成一列,取平均值

多行合并成一条数据

4.sql语句中类型转换

CAST(value as type);
CONVERT(value, type);

就是CAST(xxx AS 类型), CONVERT(xxx,类型)。

可以转换的类型是有限制的。这个类型可以是以下值其中的一个:

  • 二进制,同带binary前缀的效果 : BINARY    
  • 字符型,可带参数 : CHAR()     
  • 日期 : DATE     
  • 时间: TIME     
  • 日期时间型 : DATETIME     
  • 浮点数 : DECIMAL      
  • 整数 : SIGNED     
  • 无符号整数 : UNSIGNED 

 5.DATE_SUB() 函数从日期减去指定的时间间隔

语法

DATE_SUB(date,INTERVAL expr type)

date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。

type 参数可以是下列值:

Type 值
MICROSECOND(微秒)
SECOND(秒)
MINUTE(分)
HOUR(小时)
DAY(天数)
WEEK(周)
MONTH(月)
QUARTER(季度)
YEAR(年)
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH

实例:

1.昨天数据

2.30天前到今天的数据

3.90天前到今天的数据

 

DATE( now() ) 把时间格式化成  2016-01-12

6.获取当前时间函数

select now();//获得当前时间  格式:2016-01-12 23:21:33
select curdate();//获得当前时间  格式: 2016-01-12
select curtime();//获得当前时间  格式:23:19:43

7.QUARTER函数

获取本季度的数据 

获取上一季度数据

获取本年数据 

select * from 表名 where YEAR(时间字段名)=YEAR(NOW());

获取上一年数据。。。

 

8.空值替换为0

IFNULL(expr1,expr2) 函数

posted @ 2019-08-20 17:15  mikemhm  阅读(5311)  评论(0编辑  收藏  举报