不同类型的数据库用到的字符串截取函数可能不一样,按功能主要分为三大类:从字符串任意位置截取任意长度、从字符串左侧起获取任意长度、从字符串右侧其获取任意长度。
功能:该函数用于从字符串左侧第一位起截取指定位数内容。
参数:该函数含有2个参数,第1个参数为目标字符串,第2个参数为截取长度。
例子:
SELECT left('Afghanistan',4); /*返回值为Afgh*/
功能:该函数用于从字符串右侧第一位起截取指定长度内容。
参数:该函数含有2个参数,第1个参数为目标字符串,第2个参数为截取长度。
例子:
SELECT right('Afghanistan',4); /*返回值为stan*/
功能:该函数用于从字符串指定位置截取指定长度的内容。
参数:该函数含有3个参数,第1个参数是目标字符串;第2个参数是指定起始位置,第一位为1;第3个参数是指定长度,忽略是为截取字符串剩余全部字符。
例子:
SELECT mid('Afghanistan',4,3); /*返回值为han*/
在Oracle数据库中,没有 MID 函数,有 substr 函数实现类似功能。
功能:将字符串 s1,s2 等多个字符串合并为一个字符串,不包含分隔符。
参数:可以包含s1、s2 到 sn 等n个目标字符串。
例子:
SELECT concat('hello','world') /*返回helloworld*/
功能:将字符串 s1,s2 等多个字符串合并为一个字符串,包含分隔符。
参数:第1个参数为指定分隔符,后续可以包含s1、s2 到 sn 等n个目标字符串。
例子:
SELECT concat_ws('-','hello','world') /*返回hello-world*/
功能:将数据表中(分组后的)不同行的元素进行拼接。
语法要求:需要选择出不同的组,并将组合并,使用group_concat()函数将分组后的元素拼成一串,默认以逗号为分隔符。
例子:
利用SQLzoo平台数据库进行练习,练习网址请点击此处,利用该数据库进行练习,列出各个州下属的国家。
SELECT continent,group_concat(name) FROM world group by continent
功能:LEN() 函数返回文本字段中值的长度。MySQL 中函数为 LENGTH()。
语法:
SELECT LEN(column_name) FROM table_name; SELECT LENGTH(column_name) FROM table_name;
例子:示例参考《SQL LEN() 函数》
功能:返回第一个字符串 s 在字符串列表(s1,s2…)中的位置。
语法及参数:FIELD(s,s1,s2…),第1个参数为目标查询的字符串,后续为字符串列表。
例子:
SELECT FIELD('c','a','b','c','d','e'); /*返回值为3*/
功能:返回在字符串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,表示不存在
功能:返回字符串第1个字符对应ASCII编码。
例子:
SELECT ord('abc'); -- 返回值97 SELECT ord('a'); -- 返回值97 SELECT ascii('aba'); -- 返回值97 SELECT ascii('a'); -- 返回值97
功能:将字符串全部转化为大写或小写。
SELECT upper('Aa'); -- 返回值为AA SELECT lower('Aa'); -- 返回值为aa
功能:替换特定长度得字符串。
语法:INSERT(s1,x,len,s2),字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串
例子:
#从字符串第一个位置开始的 6 个字符替换为 runoob: SELECT INSERT('google.com', 1, 6, 'runoob'); -- 输出:runoob.com
功能:从字符串 s 中获取 s1 的开始位置
语法:LOCATE(s1,s)
例子:
#获取 b 在字符串 abc 中的位置: SELECT LOCATE('st','myteststring'); -- 5 #返回字符串 abc 中 b 的位置: SELECT LOCATE('b', 'abc') -- 2
功能:将字符串 s 重复 n 次
语法:REPEAT(s,n)
例子:
#将字符串 runoob 重复三次: SELECT REPEAT('runoob',3) -- runoobrunoobrunoob
功能:返回 n 个空格
语法:SPACE(n)
例子:
#返回 10 个空格: SELECT SPACE(10);
更多字符串函数可详见《MySQL 函数》。
对于数值计算类型的函数此处不再介绍,主要包括加减乘除、乘方开方对数、三角函数等类型,根据需要时再查询相应函数。本文介绍其他类型得数字函数
功能:进制转换
hex():将一个字符串或数字转换为十六进制格式的字符串。
unhex():把十六进制格式的字符串转化为原来的格式。每对十六进制数字转化为一个字符。
例子如下,该函数应该是能用于构造命令来绕过一些防护检查。
SELECT hex('hello'); -- 返回值为68656C6C6F SELECT unhex('68656C6C6F'); -- 返回值为hello
功能:向下取整,函数返回小于或等于指定值(value)的最小整数。
参数:仅含一个参数,为待取整数值。
例子:
select floor(1.55); -- 返回值为1
功能:均为向上取整,函数返回大于或等于指定值(value)的最小整数。
参数:仅含一个参数,为待取整数值。
例子:
select ceiling(1.44); -- 返回值为2
功能:对指定精度处四舍五入。
参数:共有两个参数,第一个参数为待取整数值,第二个参数为精度,精度为整数表示取小数点后多少位,精度为负数表示取小数点前多少位。若没有第二个参数,默认为四舍五入取整。
例子:
select round(11.55,0); -- 返回值为12 select round(11.55,1); -- 返回值为11.6 select round(1.55,-1); -- 返回值为10 select round(11.55); -- 返回值为12
功能:返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1
语法:SIGN(x)
例子:
SELECT SIGN(-10) -- (-1)
更多数字函数可详见《MySQL 函数》。
功能:都是返回当前日期。
参数:该函数不含参数。
例子:
select curdate(); -- 返回值为:Sun, 20 Mar 2022 00:00:00 GMT select current_date(); -- 返回值为:Sun, 20 Mar 2022 00:00:00 GMT
功能:都是返回当前时间。
参数:该函数不含参数。
备注:利用SQLzoo试验时失败。
功能:都是返回当前日期和时间。
参数:该函数不含参数。
例子:
select current_timestamp(); -- 返回值为:Sun, 20 Mar 2022 15:28:32 GMT select now(); -- 返回值为:Sun, 20 Mar 2022 15:28:32 GMT
功能:日期 d 今天是星期几.
语法:DAYOFWEEK(d),1 星期日,2 星期一,以此类推。
例子:
SELECT DAYOFWEEK('2011-11-11 11:11:11') ->6,为星期五
更多日期函数可详见《MySQL 函数》。
NULL函数有:IFNULL(v1,v2)、ISNULL(expression)、NULLIF(expr1, expr2)
IFNULL(v1,v2):如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。
ISNULL(expression):判断表达式是否为 NULL
NULLIF(expr1, expr2):比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1
例子:
SELECT IFNULL(null,'Hello Word') ->Hello Word SELECT ISNULL(NULL); ->1 SELECT NULLIF(25, 25); ->null
功能:对数据进行MD5加密,返回一串hash值。
参数:待加密的数据。
例子:
select md5(‘asdad’); – 返回值为:056f32ee5cf49404607e368bd8d3f2af
功能:load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件。
待优化完善,下一阶段学习《MYSQL注入中load_file()函数的进一步应用》
功能:可以测试某些特定操作的执行速度。
语法:banchmark(count,expr),第一个参数为执行次数,第二个参数为指定操作。
功能:返回给定值。 当用于生成结果集列时,NAME_CONST() 使列具有给定的名称。
语法:name_const(name,value)参数应该是常量。
(1)掌握以上常用函数的用法;
(2)思考在SQL注入时这些函数能发挥什么作用?
[1] 《MySQL 函数》建议将该文读一遍。
[2] 《MYSQL注入中load_file()函数的进一步应用》待学习研究。
[3] 《【SQL基础】SQL常用函数简要解析》