语法:

COUNT(DISTINCT expr ,[expr ...])

函数使用说明:返回不同的非NULL 值数目。若找不到匹配的项,则COUNT(DISTINCT) 返回 0

Mysql的查询结果行字段拼接,可以用下面两个函数实现:

1. concat函数

mysql> select concat('','','') from test ;
+---------------------+
| concat('','','') |
+---------------------+
| 123 |
+---------------------+

如果连接串中存在NULL,则返回结果为NULL:

mysql> select concat('','',NULL,'') from test ;
+--------------------------+
| concat('','',NULL,'') |
+--------------------------+
| NULL |
+--------------------------+

2. concat_ws函数

concat(separator,str1,str2,...) 代表 concat with separator ,是concat()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。

mysql> select concat_ws(':','','','') from test ;
+----------------------------+
| concat_ws(':','','','') |
+----------------------------+
| 1:2:3 |
+----------------------------+

分隔符为NULL,则返回结果为NULL:

mysql> select concat_ws(NULL,'','','') from test;
+-----------------------------+
| concat_ws(NULL,'','','') |
+-----------------------------+
| NULL |
+-----------------------------+

如果参数中存在NULL,则会被忽略:

mysql> select concat_ws(':','','',NULL,NULL,NULL,'') from test ;
+-------------------------------------------+
| concat_ws(':','','',NULL,NULL,NULL,'') |
+-------------------------------------------+
| 1:2:3 |
+-------------------------------------------+

可以对NULL进行判断,并用其它值进行替换:

mysql>  select concat_ws(':','','',ifNULL(NULL,''),'') from bank limit 1;
+---------------------------------------------+
| concat_ws(':','','',ifNULL(NULL,''),'') |
+---------------------------------------------+
| 1:2:0:3 |
+---------------------------------------------+
concat的SQL注入:
select username,email,content from test_table where user_id=uid;

上面的user_id是接收输入的。

concat函数本来是这样用的SELECT CONCAT('My', 'S', 'QL');执行结果是'MySQL'。也就是连接作用的。我们利用它来为我们服务,

uid=-1 union select username ,concat(password,sex,address,telephone),content from test_talbe where user_id=管理员id;

这个语句实际查询了六个字段,但是显示的时候,把password,sex,address,telephone等字段合在一起,显示在原本应该显示email的地方。

更好的方法:中间用分隔符分开:

uid=-1 union select username ,concat(password,0×3a,sex,0×3a,address,0×3a,telephone) ,content from test_talbe where user_id=管理员id;

其中0×3a是“:”的十六进 制形式。

 

mysql函数之四:concat() mysql 多个字段拼接的更多相关文章

  1. mysql函数之八:mysql函数大全

    对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回NULL. mysql& ...

  2. mysql函数之六:mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey

    mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得 ...

  3. sql语句中避免使用mysql函数,提升mysql处理能力。

    如下sql中不要用mysql内置函数now()等,这样第一可以提高sql执行效率,第二统一程序层处理sql中时间参数,避免因服务器时间差导致问题产生. 使用PDO预处理,第一可以提高sql效率,第二可 ...

  4. MySQL语句进行分组后的含有字段拼接方法

    MySQL语句: SELECT GROUP_CONCAT(DISTINCT transaction_no) FROM `lm_wh_trans` GROUP BY staff_code; 如果tran ...

  5. 【转】mysql函数

    MySQL函数 MySQL数据库提供了很多函数包括: 数学函数: 字符串函数: 日期和时间函数: 条件判断函数: 系统信息函数: 加密函数: 格式化函数: 一.数学函数 数学函数主要用于处理数字,包括 ...

  6. 第二百八十五节,MySQL数据库-MySQL函数

    MySQL数据库-MySQL函数 1.MySQL内置函数 SELECT执行函数,后面跟要执行的函数 CHAR_LENGTH(str)函数:返回字符串的字符长度 -- CHAR_LENGTH(str)函 ...

  7. 【MySQL函数】MySQL 5.5从零开始学第六章

    说明:本文总结自:<MySQL 5.5从零开始学>第六章 MySQL中的函数包括: 数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数和加密函数等. 函数: 表示对输入参数值 ...

  8. MySQL学习笔记(三)——计算字段及常用函数

    拼接字段-Concat()函数        将值连接在一起构成单个值.注意:大多数DBMS使用+或者||来实现拼接,mysql则使用Concat()函数来实现. 去空格函数-Trim函数       ...

  9. mysql函数concat与group_concat使用说明

    mysql函数concat与group_concat使用说明concat()函数<pre>mysql> select concat(',',name,',') from `user` ...

随机推荐

  1. mac操作

    资料搜集: mac终端 常用命令操作 mac osx常用快捷键一览 mac chrome快捷键

  2. html、css如何画实心圆

    css3画实心圆 实现方法相当简单,css代码如下: .circle{ width:100px; height:100px; border-radius:50px; /* 图形的半径 */ }

  3. 静态类(static)与java值传递、引用传递小测

    java中都是值传递.直接上代码了: class TestStaticA { static { System.out.println("b"); } public TestStat ...

  4. 分享10款效果惊艳的HTML5图片特效【转】

    先插入一条广告,博主新开了一家淘宝店,经营自己纯手工做的发饰,新店开业,只为信誉!需要的亲们可以光顾一下!谢谢大家的支持!店名: 小鱼尼莫手工饰品店经营: 发饰.头花.发夹.耳环等(手工制作)网店: ...

  5. Java工程师之Spring Framework深度剖析专栏

    系列前言 关于本系列 本系列章节目录 Spring Framework核心篇 重新来认识你的老朋友Spring框架 Spring容器装配Bean的三种方式 Spring Framework核心概念之B ...

  6. informix数据库知识积累

    一.嵌套查询 informix子查询:嵌套查询(1)select first 20 * from (select first 40 * from hlrquery_log order by id de ...

  7. poj1001 Exponentiation【java大数】

    Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 183034   Accepted: 44062 ...

  8. 异步IO

    异步IO   在IO编程一节中,我们已经知道,CPU的速度远远快于磁盘.网络等IO.在一个线程中,CPU执行代码的速度极快,然而,一旦遇到IO操作,如读写文件.发送网络数据时,就需要等待IO操作完成, ...

  9. flask 日志

    https://www.polarxiong.com/archives/Flask%E4%BD%BF%E7%94%A8%E6%97%A5%E5%BF%97%E8%AE%B0%E5%BD%95%E5%8 ...

  10. BPDU报文(RSTP)

    与STP 的BPDU报文格式相同,就是在flags字段报文中间几位得到应用 主要原理:利用flages位中的Proposal与Agreement来进行协商,从而快速从 discarding 转成 fo ...