Java教程

【SQL基础-3】SQL常用函数

本文主要是介绍【SQL基础-3】SQL常用函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

  • 1 字符串函数
    • 1.1 字符串截取
      • 1.1.1 left()
      • 1.1.2 right()
      • 1.1.3 mid()
    • 1.2 字符串连接
      • 1.2.1 concat()
      • 1.2.2 concat_ws()
      • 1.2.3 group_concat()
    • 1.3 字符串的其他操作
      • 1.3.1 len()与length()
      • 1.3.2 field()
      • 1.3.3 FIND_IN_SET()
      • 1.3.4 ord()和ASCII()
      • 1.3.5 upper()和lower()
      • 1.3.6 INSERT()
      • 1.3.7 LOCATE()
      • 1.3.8 REPEAT()
      • 1.3.9 SPACE()
  • 2 数字函数
    • 2.1 hex()和unhex()
    • 2.2 floor()
    • 2.3 ceil()和ceiling()
    • 2.4 round()
    • 2.5 SIGN()
  • 3 日期函数
    • 3.1 curdate() 和 current_date()
    • 3.2 curtime() 和 current_time()
    • 3.3 current_timestamp() 和 now()
    • 3.4 DAYOFWEEK()
  • 4 其他函数
    • 4.1 NULL函数
    • 4.2 md5()
    • 4.3 load_file()
    • 4.4 banchmark()
    • 4.5 name_const()
  • 5 归纳
  • 参考文章

1 字符串函数

1.1 字符串截取

不同类型的数据库用到的字符串截取函数可能不一样,按功能主要分为三大类:从字符串任意位置截取任意长度、从字符串左侧起获取任意长度、从字符串右侧其获取任意长度。

1.1.1 left()

功能:该函数用于从字符串左侧第一位起截取指定位数内容
参数:该函数含有2个参数,第1个参数为目标字符串,第2个参数为截取长度。
例子

SELECT left('Afghanistan',4);
/*返回值为Afgh*/

1.1.2 right()

功能:该函数用于从字符串右侧第一位起截取指定长度内容
参数:该函数含有2个参数,第1个参数为目标字符串,第2个参数为截取长度。
例子

SELECT right('Afghanistan',4);
/*返回值为stan*/

1.1.3 mid()

功能:该函数用于从字符串指定位置截取指定长度的内容
参数:该函数含有3个参数,第1个参数是目标字符串;第2个参数是指定起始位置,第一位为1;第3个参数是指定长度,忽略是为截取字符串剩余全部字符。
例子

SELECT mid('Afghanistan',4,3);
/*返回值为han*/

在Oracle数据库中,没有 MID 函数,有 substr 函数实现类似功能。

1.2 字符串连接

1.2.1 concat()

功能:将字符串 s1,s2 等多个字符串合并为一个字符串,不包含分隔符
参数:可以包含s1、s2 到 sn 等n个目标字符串。
例子

SELECT concat('hello','world')
/*返回helloworld*/

1.2.2 concat_ws()

功能:将字符串 s1,s2 等多个字符串合并为一个字符串,包含分隔符
参数:第1个参数为指定分隔符,后续可以包含s1、s2 到 sn 等n个目标字符串。
例子

SELECT concat_ws('-','hello','world')
/*返回hello-world*/

1.2.3 group_concat()

功能:将数据表中(分组后的)不同行的元素进行拼接
语法要求:需要选择出不同的组,并将组合并,使用group_concat()函数将分组后的元素拼成一串,默认以逗号为分隔符。
例子
利用SQLzoo平台数据库进行练习,练习网址请点击此处,利用该数据库进行练习,列出各个州下属的国家。

SELECT continent,group_concat(name)
FROM world
group by continent

在这里插入图片描述

1.3 字符串的其他操作

1.3.1 len()与length()

功能:LEN() 函数返回文本字段中值的长度。MySQL 中函数为 LENGTH()
语法

SELECT LEN(column_name) FROM table_name;
SELECT LENGTH(column_name) FROM table_name;

例子:示例参考《SQL LEN() 函数》
在这里插入图片描述

1.3.2 field()

功能:返回第一个字符串 s 在字符串列表(s1,s2…)中的位置
语法及参数:FIELD(s,s1,s2…),第1个参数为目标查询的字符串,后续为字符串列表。
例子

SELECT FIELD('c','a','b','c','d','e');
/*返回值为3*/

1.3.3 FIND_IN_SET()

功能:返回在字符串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.3.4 ord()和ASCII()

功能:返回字符串第1个字符对应ASCII编码
例子

SELECT ord('abc');			-- 返回值97
SELECT ord('a');			-- 返回值97
SELECT ascii('aba');		-- 返回值97
SELECT ascii('a');			-- 返回值97

1.3.5 upper()和lower()

功能:将字符串全部转化为大写或小写。

SELECT upper('Aa');		-- 返回值为AA
SELECT lower('Aa');		-- 返回值为aa

1.3.6 INSERT()

功能:替换特定长度得字符串。
语法:INSERT(s1,x,len,s2),字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串
例子

#从字符串第一个位置开始的 6 个字符替换为 runoob:
SELECT INSERT('google.com', 1, 6, 'runoob');  -- 输出:runoob.com

1.3.7 LOCATE()

功能:从字符串 s 中获取 s1 的开始位置
语法:LOCATE(s1,s)
例子

#获取 b 在字符串 abc 中的位置:
SELECT LOCATE('st','myteststring');  -- 5

#返回字符串 abc 中 b 的位置:
SELECT LOCATE('b', 'abc') -- 2

1.3.8 REPEAT()

功能:将字符串 s 重复 n 次
语法:REPEAT(s,n)
例子

#将字符串 runoob 重复三次:
SELECT REPEAT('runoob',3) -- runoobrunoobrunoob

1.3.9 SPACE()

功能:返回 n 个空格
语法:SPACE(n)
例子

#返回 10 个空格:
SELECT SPACE(10);

更多字符串函数可详见《MySQL 函数》。

2 数字函数

对于数值计算类型的函数此处不再介绍,主要包括加减乘除、乘方开方对数、三角函数等类型,根据需要时再查询相应函数。本文介绍其他类型得数字函数

2.1 hex()和unhex()

功能:进制转换
hex():将一个字符串或数字转换为十六进制格式的字符串。
unhex():把十六进制格式的字符串转化为原来的格式。每对十六进制数字转化为一个字符。
例子如下,该函数应该是能用于构造命令来绕过一些防护检查。

SELECT hex('hello');			-- 返回值为68656C6C6F
SELECT unhex('68656C6C6F');		-- 返回值为hello

2.2 floor()

功能:向下取整,函数返回小于或等于指定值(value)的最小整数。
参数:仅含一个参数,为待取整数值。
例子

select floor(1.55);		-- 返回值为1

2.3 ceil()和ceiling()

功能:均为向上取整,函数返回大于或等于指定值(value)的最小整数。
参数:仅含一个参数,为待取整数值。
例子

select ceiling(1.44);	-- 返回值为2

2.4 round()

功能:对指定精度处四舍五入
参数:共有两个参数,第一个参数为待取整数值,第二个参数为精度,精度为整数表示取小数点后多少位,精度为负数表示取小数点前多少位。若没有第二个参数,默认为四舍五入取整。
例子

select round(11.55,0);		-- 返回值为12
select round(11.55,1);		-- 返回值为11.6
select round(1.55,-1);		-- 返回值为10
select round(11.55);		-- 返回值为12

2.5 SIGN()

功能:返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1 
语法:SIGN(x)
例子

SELECT SIGN(-10) -- (-1)

更多数字函数可详见《MySQL 函数》。

3 日期函数

3.1 curdate() 和 current_date()

功能:都是返回当前日期。
参数:该函数不含参数。
例子

select curdate();		-- 返回值为:Sun, 20 Mar 2022 00:00:00 GMT
select current_date();	-- 返回值为:Sun, 20 Mar 2022 00:00:00 GMT

3.2 curtime() 和 current_time()

功能:都是返回当前时间。
参数:该函数不含参数。
备注:利用SQLzoo试验时失败。

3.3 current_timestamp() 和 now()

功能:都是返回当前日期和时间。
参数:该函数不含参数。
例子

select current_timestamp();	-- 返回值为:Sun, 20 Mar 2022 15:28:32 GMT
select now();				-- 返回值为:Sun, 20 Mar 2022 15:28:32 GMT

3.4 DAYOFWEEK()

功能:日期 d 今天是星期几.
语法:DAYOFWEEK(d),1 星期日,2 星期一,以此类推。
例子

SELECT DAYOFWEEK('2011-11-11 11:11:11')
->6,为星期五

更多日期函数可详见《MySQL 函数》。

4 其他函数

4.1 NULL函数

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

4.2 md5()

功能:对数据进行MD5加密,返回一串hash值
参数:待加密的数据。
例子

select md5(‘asdad’); – 返回值为:056f32ee5cf49404607e368bd8d3f2af

4.3 load_file()

功能load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件
待优化完善,下一阶段学习《MYSQL注入中load_file()函数的进一步应用》

4.4 banchmark()

功能:可以测试某些特定操作的执行速度。
语法:banchmark(count,expr),第一个参数为执行次数,第二个参数为指定操作。

4.5 name_const()

功能:返回给定值。 当用于生成结果集列时,NAME_CONST() 使列具有给定的名称。
语法:name_const(name,value)参数应该是常量。

5 归纳

(1)掌握以上常用函数的用法;
(2)思考在SQL注入时这些函数能发挥什么作用?

参考文章

[1] 《MySQL 函数》建议将该文读一遍。
[2] 《MYSQL注入中load_file()函数的进一步应用》待学习研究。
[3] 《【SQL基础】SQL常用函数简要解析》

这篇关于【SQL基础-3】SQL常用函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!