admin管理员组

文章数量:1794759

【SQL基础】SQL常用函数简要解析

【SQL基础】SQL常用函数简要解析

目录
  • 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