目录
- 1 字符串截取
- 1.1 left()
- 1.2 right()
- 1.3 mid()
- 2 字符串连接
- 2.1 concat()
- 2.2 concat_ws()
- 2.3 group_concat()
- 3 字符串的其他操作
- 3.1 len()与length()
- 3.2 field()
- 3.3 find_inset()
- 3.4 ord()和ascii()
- 3.5 upper()和lower()
- 4 数值类型函数
- 4.1 hex()和unhex()
- 4.2 floor()
- 4.3 ceiling()
- 4.4 round()
- 5 日期类型函数
- curdate() 和 current_date()
- curtime() 和 current_time()
- current_timestamp() 和 now()
- 6 其他函数
- 6.1 md5()
- 6.2 load_file()
- 6.3 banchmark()
- 6.4 name_const()
- 7 总结
- 参考文献
1 字符串截取
不同类型的数据库用到的字符串截取函数可能不一样,按功能主要分为三大类:从字符串任意位置截取任意长度、从字符串左侧起获取任意长度、从字符串右侧其获取任意长度。
1.1 left()
- 功能:该函数用于从字符串左侧第一位起截取指定位数内容。
- 参数:该函数含有2个参数,第1个参数为目标字符串,第2个参数为截取长度。
SELECT left('Afghanistan',4);
/*返回值为Afgh*/
1.2 right()
- 功能:该函数用于从字符串右侧第一位起截取指定长度内容。
- 参数:该函数含有2个参数,第1个参数为目标字符串,第2个参数为截取长度。
SELECT right('Afghanistan',4);
/*返回值为stan*/
1.3 mid()
- 功能:该函数用于从字符串指定位置截取指定长度的内容。
- 参数:该函数含有3个参数,第1个参数时目标字符串;第2个参数是指定起始位置,第一位为1;第3个参数是指定长度,忽略是为截取字符串剩余全部字符。
SELECT mid('Afghanistan',4,3);
/*返回值为han*/
- 在Oracle数据库中,没有 MID 函数,有 substr 函数实现类似功能。
2 字符串连接
2.1 concat()
- 功能:将字符串 s1,s2 等多个字符串合并为一个字符串,不包含分隔符。
- 参数:可以包含s1、s2 到 sn 等n个目标字符串。
- 例子:
SELECT concat('hello','world')
/*返回helloworld*/
2.2 concat_ws()
- 功能:将字符串 s1,s2 等多个字符串合并为一个字符串,包含分隔符。
- 参数:第1个参数为指定分隔符,后续可以包含s1、s2 到 sn 等n个目标字符串。
- 例子:
SELECT concat_ws('-','hello','world')
/*返回hello-world*/
2.3 group_concat()
- 功能:将数据表中(分组后的)不同行的元素进行拼接。
- 语法要求:需要选择出不同的组,并将组合并,使用group_concat()函数将分组后的元素拼成一串,默认以逗号为分隔符。
- 例子:
利用SQLzoo平台数据库进行练习,练习网址请点击此处,利用该数据库进行练习,将不同州的国家名拼接起来。
SELECT continent,group_concat(name)
FROM world
group by continent
3 字符串的其他操作
3.1 len()与length()
- 功能:LEN() 函数返回文本字段中值的长度。MySQL 中函数为 LENGTH()。
- 语法如下,示例参考《SQL LEN() 函数》
SELECT LEN(column_name) FROM table_name;
SELECT LENGTH(column_name) FROM table_name;
3.2 field()
- 功能:返回第一个字符串 s 在字符串列表(s1,s2…)中的位置。
- 语法及参数:FIELD(s,s1,s2…),第1个参数为目标查询的字符串,后续为字符串列表。
- 例子:
SELECT FIELD('c','a','b','c','d','e');
/*返回值为3*/
3.3 find_inset()
- 功能:返回在字符串s2中与s1匹配的字符串的位置。
- 语法及参数:FIND_IN_SET(s1,s2),第1个参数为目标字符串,第2个参数为查找范围。
- 例子:
SELECT FIND_IN_SET('c', 'a,b,c,d,e');-- 返回值为3
SELECT FIND_IN_SET('c', 'abcd,e');-- 返回值为0,表示不存在
3.4 ord()和ascii()
- 功能:返回字符串第1个字符对应ASCII编码。
- 例子:
SELECT ord('abc'); -- 返回值97
SELECT ord('a'); -- 返回值97
SELECT ascii('aba'); -- 返回值97
SELECT ascii('a'); -- 返回值97
3.5 upper()和lower()
功能:将字符串全部转化为大写或小写。
SELECT upper('Aa'); -- 返回值为AA
SELECT lower('Aa'); -- 返回值为aa
4 数值类型函数
对于数值计算类型的函数此处不再介绍,主要包括加减乘除、乘方开方对数、三角函数等类型,根据需要时再查询相应函数。
4.1 hex()和unhex()
- 功能:
- hex():将一个字符串或数字转换为十六进制格式的字符串。
- unhex():把十六进制格式的字符串转化为原来的格式。每对十六进制数字转化为一个字符。
- 例子如下,该函数应该是能用于构造命令来绕过一些防护检查。
SELECT hex('hello'); -- 返回值为68656C6C6F
SELECT unhex('68656C6C6F'); -- 返回值为hello
4.2 floor()
- 功能:向下取整,函数返回小于或等于指定值(value)的最小整数。
- 参数:仅含一个参数,为待取整数值。
- 例子:
select floor(1.55); -- 返回值为1
4.3 ceiling()
- 功能:向上取整,函数返回大于或等于指定值(value)的最小整数。
- 参数:仅含一个参数,为待取整数值。
- 例子:
select ceiling(1.44); -- 返回值为2
4.4 round()
- 功能:对指定精度处四舍五入取整。
- 参数:共有两个参数,第一个参数为待取整数值,第二个参数为精度,精度为整数表示取小数点后多少位,精度为负数表示取小数点前多少位。
- 例子:
select round(11.55,0); -- 返回值为12
select round(11.55,1); -- 返回值为11.6
select round(1.55,-1); -- 返回值为10
5 日期类型函数
curdate() 和 current_date()
- 功能:都是返回当前日期。
- 参数:该函数不含参数。
- 例子:
select curdate(); -- 返回值为:Tue, 08 Feb 2022 00:00:00 GMT
select current_date(); -- 返回值为:Tue, 08 Feb 2022 00:00:00 GMT
curtime() 和 current_time()
- 功能:都是返回当前时间。
- 参数:该函数不含参数。
- 备注:利用SQLzoo试验时失败。
current_timestamp() 和 now()
- 功能:都是返回当前日期和时间。
- 参数:该函数不含参数。
- 例子:
select current_timestamp(); -- 返回值为:Tue, 08 Feb 2022 09:19:23 GMT
select now(); -- 返回值为:Tue, 08 Feb 2022 09:21:02 GMT
6 其他函数
6.1 md5()
- 功能:对数据进行MD5加密,返回一串hash值。
- 参数:待加密的数据。
- 例子:
select md5(‘asdad’); – 返回值为:056f32ee5cf49404607e368bd8d3f2af
6.2 load_file()
- 功能:load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件。
- 待优化完善,下一阶段学习《MYSQL注入中load_file()函数的进一步应用》
6.3 banchmark()
- 功能:可以测试某些特定操作的执行速度。
- 语法:banchmark(count,expr),第一个参数为执行次数,第二个参数为指定操作。
6.4 name_const()
- 功能:返回给定值。 当用于生成结果集列时,NAME_CONST() 使列具有给定的名称。
- 语法:name_const(name,value)参数应该是常量。
7 总结
- 掌握以上常用函数的用法;
- 思考在SQL注入时这些函数能发挥什么作用?
参考文献
- 《MySQL 函数》建议将该文读一遍。
- 《MYSQL注入中load_file()函数的进一步应用》待学习研究。
更多推荐
【SQL基础】SQL常用函数简要解析
发布评论