mysql函数

MySQL常用函数之ORDER BY

匿名 (未验证) 提交于 2019-12-02 22:06:11
ORDER BY 语句用于根据指定的列对结果集进行排序,语句默认(asc)按照升序对记录进行排序。 如果您希望按照降序对记录进行排序,可以使用 desc 关键字; ORDER BY写在WHERE之后。 一个学生信息表结构如下: sql语句(拿去直接用) -- ---------------------------- -- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of student -- ---------------------------- INSERT INTO `student` VALUES ('1', 'sunyan', '22', 'a', '1', '3', 'x'); INSERT INTO `student` VALUES ('2', 'liukan', '21', 'a', '3', '2', 'x'); INSERT INTO `student` VALUES ('3',

MySQL__基本语句和函数

匿名 (未验证) 提交于 2019-12-02 22:06:11
-- 执行顺序 1.增删改 INSERT INTO 表名(列名,列名) VALUES ('字段','字段') UPDATE 表名 SET user_name = '老李' WHERE user_id = 8 DELETE FROM 表名 WHERE user_id = 8 2.分页 select * from stu limit 5 offset 5 limit 5表示每页查五条数据 offset 5 表示从第五条数据开始 select * from stu limit 5,2 limit后面是从第5条开始读,读取2条信息。 3. 1. CONCAT(str1,str2,...) ('工号为:',FNumber,'的员工的幸福指数:',FSalary/(FAge-21)) 2. CONCAT_WS : 可以在待拼接的字符串之间加入指定的分隔符,它的第一个参数值为采用的分 隔符,而剩下的参数则为待拼接的字符串值 SELECT ',' FROM 4.having where 的区别 where: 只能对表中的 字段名 进行筛选 having: 对查询结果中的列发挥作用,筛选数据 例: 查询本店商品价格比市场价低多少钱,输出低200元以上的商品 这里不能用where因为s是查询结果,而where只能对表中的字段名筛选 select - as from having < 200

mysql concat用法

匿名 (未验证) 提交于 2019-12-02 22:06:11
mysql concat()函数用于将多个字段连接在一起返回。 例如:city表中字段name用来表示城市名,level表示城市的级别,有一、二、三级城市。现在需要返回二级城市+三级城市,如:北京东城区,那么sql可以这么写: select concat(c1.name,c2.name) city_name from city1 left join city2 on city2.parrentCode = city1.code where city1. level = 2 and city2. level = 3 文章来源: mysql concat用法

mysql数据库的concat(),group_concat(),concat_ws()函数,三者之间的比较

匿名 (未验证) 提交于 2019-12-02 22:06:11
今天在写项目的时候,看到同事使用group_concat()函数 和concat_ws()函数,这两个函数和普通的concat()函数之间到底有什么不同。 我使用的 数据库是mysql数据库。 GROUP_CONCAT函数: SELECT GROUP_CONCAT(MappPolicyNo, '') FROM lcmapPolicyNo WHERE PolicyNo ='MGU201909003'; 显示结果:1111111111,111111111112,112121212,123456789,2222222222,22222222222,2222222223,25345345,3333333333111,3453322222222,3453453453,44556666,45555555555555534,6666666666666 由此可见:这个函数是将这个保单下的多个分单号以逗号的方式进行拼接显示 SELECT GROUP_CONCAT(1,2,3,'') from dual; 显示结果:123 由此可见,这和concat函数的运行结果是相同的。 CONCAT 函数 SELECT concat(1,2,3,'') from dual; 显示结果:123 CONCAT_WS 函数 SELECT CONCAT_WS( '', ClientCFirstName,

mysql 模糊查询,用户输入通配符‘_’和‘%’处理

匿名 (未验证) 提交于 2019-12-02 22:06:11
当项目使用mysql并对字段进行模糊搜索时,如果系统对字段的字符没有做到限制,就会经常出现用户输入下划线‘_’、百分号‘%’此类通配符进行搜索,如此执行往往会检索到错误的结果集,下滑线‘_’会匹配单个任意字符,百分号‘%’会匹配任意个任意字符。 为了方便理解。for example: 在使用like进行模糊匹配时,常规写法为:field like CONCAT('%',变量,'%') 那么结果为: field like ‘%关键字%’,此时搜索出的结果是正确的。 那么问题来了,当用户输入单个‘_’,此时执行的语句就是 field like ‘%_%’ , 此时匹配的结果就是整张表的全部数据。 或者这样: field like ‘%%%’ ,结果可想而知 解决方案 一,使用INSTR替换like INSTR不会识别通配符,只会判断第二个字符串参数在第一个字符串中是否存在。确保此论是有据可依的,上官网。 INSTR用法(官网截图) 这里只是说明了该函数会将第二个参数在第一个参数第一次出现的首字母索引位置。通过广大网友的文档翻阅中发现该函数用于where字句中即可达到模糊查询的效果。 使用: select * form users where INSTR(users_name,‘用户输入’) 等同于 select * from users where users_name like

一条SQL查询语句是如何执行的?

匿名 (未验证) 提交于 2019-12-02 22:06:11
本篇文章将通过一条 SQL 的执行过程来介绍 MySQL 的基础架构。 首先有一个 user_info 表,表里有一个 id 字段,执行下面这条查询语句: select * from user_info where id = 1 ; 返回结果为: +----+----------+----------+--------+------+---------------------+---------------------+ | id | username | password | openid | role | create_time | update_time | +----+----------+----------+--------+------+---------------------+---------------------+ | 1 | 武培轩 | 123 | 1 | 1 | 2019 - 08 - 29 00 : 29 : 08 | 2019 - 08 - 29 00 : 29 : 08 | +----+----------+----------+--------+------+---------------------+---------------------+ 下面给出 MySQL 的基本架构示意图,可以看出 SQL 语句在 MySQL 的各个模块中的执行过程

MySql自定义函数-关于保留小数位的特殊需求

匿名 (未验证) 提交于 2019-12-02 22:06:11
昨天,关于价格详情接口又来了一个小需求,而且有点特别。价格显示:改为保留两位小数,没错,就是保留两位小数。大家是不是想说这没啥特别的。。。数据库都有函数搞定了。例如四舍五入的ROUND(x,d),直接截取的TRUNCATE(x,d),还可以利用类型转换CONVERT(value,type)等等。但是,上面的都不能满足这个保留两位的特殊需求,我们来看一下究竟怎么保留两位:小数点两位后,只要大于0的,就直接进一。例如:1.8100 -> 1.81,1.8102 -> 1.82 那么,这需要怎么解决呢,数据库好像确实没函数来这么弄了,那么只能在sql里判断,或者java里判断了。因为这要快速搞定,就直接在sql里入手了。其实也很简单:如果原数比直接截取两位后的数大,表示两位后还有数,然后就直接+0.01。 sql这么改: if(price > TRUNCATE(price,2),TRUNCATE(price,2)+0.01,TRUNCATE(price,2)) AS elecPrice 回头一想,sql好像写得有点僵硬,如果有多个字段需要这样显示,那岂不是每个都要写这么长一串。又如果不是保留两位,而是保留三位,那么岂不是之前的sql又得全部改一遍。。这么一想,我突然就很头疼。程序员嘛,还是得有点追求,不能只为解决问题,一定要自己思考一种比较好的方案:通用的,简洁的。最后

MySql逗号拼接字符串查询

匿名 (未验证) 提交于 2019-12-02 22:06:11
下面两个函数的使用和FIND_IN_SET一样,使用时只需要把FIND_IN_SET换成FIND_PART_IN_SET或FIND_ALL_PART_IN_SET 例如某字段里是为1,2,3,4,5 使用方法: 第一种,传入1,3,6 可以查出来 select * from XXX where FIND_PART_IN_SET('1,3,6','1,2,3,4,5') 第二种,传入1,3,6 查不出来 select * from XXX where FIND_ALL_PART_IN_SET('1,3,6','1,2,3,4,5') 函数: 第一种:只要包含其中一个就可以被查出来 CREATE DEFINER = root @ % FUNCTION NewProc (str1 text,str2 text) RETURNS text BEGIN #传入两个逗号分割的字符串,判断第二个字符串是否包含第一个字符串split之后的单个 DECLARE CURRENTINDEX INT;#当前下标 DECLARE CURRENTSTR text; DECLARE result int; set result = 0; set CURRENTINDEX = 0; set CURRENTSTR = ''; IF str1 IS NOT NULL AND str1 != '' THEN SET

mysql基础语句整理,CRUD,GROUP BY,多表联查

匿名 (未验证) 提交于 2019-12-02 22:06:11
Ŀ¼ INSERT, DELETE, UPDATE SELECT GROUP BY: 多表联查 内连接 外连接 注意事项: 自连接 子查询 //创建数据库和表 CREATE DATABASE myDatabase1; USE myDatabase1; CREATE TABLE myTable( ); //PRIMARY KEY 主键 //AUTO_INCREMENT 主键自增长 INSERT, DELETE, UPDATE //增 INSERT INTO mytable (sname,sphone) VALUES('zhangsan',1232313213); INSERT INTO mytable VALUES(NULL,'zhangsan',1232313213); //ɾ DELETE FROM mytable WHERE saddress='zhangsandizhi'; //删除(清空)表的内容,保留结构 //TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据) TRUNCATE TABLE mytable; //改 UPDATE mytable SET sname='lisi' ,sage=14 WHERE sname='zhangsan'; SELECT //查 SELECT * FROM mytable WHERE sid=1;

mybatis中mysql,sql能查到,但是返回结果为0的问题

匿名 (未验证) 提交于 2019-12-02 22:06:11
问题起因,多数据库支持的问题。 ORCALE下,selectFuzzyByParam方法中的sql,单独执行能找到之,方法返回值也有对应的对象。 <select id="selectFuzzyByParam" parameterType="map" resultType="com.***.***.***.***.SysProjectDO"> <if test="queryValue != null"> <bind name="pattern1" value="'%' + queryValue + '%'" /> </if> SELECT * FROM ( select ID, CODE, NVL(TABLE1.TEXT,TABLE2.NAME) as NAME , STATUS, CREATOR, CREATE_TIME, UPDATE_TIME,PROJECT_DESC AS "desc",PROJECT_TYPE AS "type" from TABLE2 LEFT JOIN TABLE1 on TABLE2.ID = TABLE1.DATA_ID <if test="languageCode != null"> and TABLE1.LANGUAGE_CODE = #{languageCode} </if> ) <where> <if test="queryValue !=