函数:
1、CONCAT_WS 的用法
从数据库里取N个字段,然后组合到一起用“,”分割显示,起初想到用CONCAT()来处理,好是麻烦,没想到在手册里居然有提到CONCAT_WS(),非常好用。
CONCAT_WS(separator, str1, str2,...)
它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间
简单例子如下:
mysql> SELECT CONCAT_WS(",","First name","Second name","Last Name");
-> 'First name,Second name,Last Name'
mysql> SELECT CONCAT_WS(",","First name",NULL,"Last Name");
-> 'First name,Last Name'
2.length()
length(str) 返回字符串的长度
3.mid()
此函数为截取字符串一部分。MID(column_name,start[,length])
参数
描述
column_name 必需。要提取字符的字段。
start 必需。规定开始位置(起始值是 1)。
length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。
Eg: str="123456" mid(str,2,1) 结果为2
Sql用例:
(1)MID(DATABASE(),1,1)>’a’,查看数据库名第一位,MID(DATABASE(),2,1)查看数据库名第二位,依次查看各位字符。
(2)MID((SELECT
table_name FROM INFORMATION_SCHEMA.TABLES WHERE T table_schema=0xxxxxxx
LIMIT 0,1),1,1)>’a’此处column_name参数可以为sql语句,可自行构造sql语句进行注入。
4.substr()函数
Substr()和substring()函数实现的功能是一样的,均为截取字符串。
string substring(string, start, length)
string substr(string, start, length)
参数描述同mid()函数,第一个参数为要处理的字符串,start为开始位置,length为截取的长度。
Sql用例:
(1) substr(DATABASE(),1,1)>’a’,查看数据库名第一位,substr(DATABASE(),2,1)查看数据库名第二位,依次查看各位字符。
(2)
substr((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE T
table_schema=0xxxxxxx LIMIT
0,1),1,1)>’a’此处string参数可以为sql语句,可自行构造sql语句进行注入。
5.Left()函数
Left()得到字符串左部指定个数的字符
Left ( string, n ) string为要截取的字符串,n为长度。
Sql用例:
(1) left(database(),1)>’a’,查看数据库名第一位,left(database(),2)>’ab’,查看数据库名前二位。
(2) 同样的string可以为自行构造的sql语句。
同时也要介绍ORD()函数,此函数为返回第一个字符的ASCII码,经常与上面的函数进行组合使用。
例如ORD(MID(DATABASE(),1,1))>114 意为检测database()的第一位ASCII码是否大于114,也即是‘r’
6.exits()函数
exists是一个存在判断,如果后面的查询中有结果,则exists为真,否则为假.
可利用 and exits(),在exits函数内利用length()>0或ascii()函数判断ture或flase
7.sleep()函数
sleep(n)延迟n秒
栗子:
?id=1';select if(length(database())>=8,sleep(4),1)
8.ascii()函数:
ascii()返回字符的ascii码
ord() 函数与ascii()函数效果雷同
9.if()函数
if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句
10.concat()
mysql中的连接函数
11.limit()
Limit子句可以被用于强制 SELECT 语句返回指定的记录数。Limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
12. ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数 (个人理解不一定对)
isnull是判断一个字段是否为空值,返回一个特定的值
栗子:
不为空时返回0
为空时返回1
语法
ISNULL ( check_expression , replacement_value )
参数
check_expression
将被检查是否为NULL的表达式。check_expression 可以是任何类型的。
replacement_value
在check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。
返回类型
返回与check_expression 相同的类型。
注释
如果check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。
NVL(), IFNULL() 和 COALESCE() 函数也可以达到相同的结果。
Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数达到相同的结果:
13.CAST (expression AS data_type)
CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。
语法:CAST (expression AS data_type)
expression:任何有效的SQServer表达式。
AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。
可以转换的类型是有限制的。这个类型可以是以下值其中的一个:
二进制,同带binary前缀的效果 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME
浮点数 : DECIMAL
整数 : SIGNED
无符号整数 : UNSIGNED
14 nvarchar和varchar 的区别是存储方式不同:
比如说varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符1个字符就等于2个字节.所以varchar(40)只能存储20个中文字符。
nvarchar每个字符占用2个字节,nvarchar(40),就可以存储40个中文字符。nvarchar要相对于存储的字符类型。比如有些字符是占3个字节的。
varchar(n) :n最大8000个字节,8000个英文字符,4000个汉字
nvarchar(n) :n最大4000个字符,不论英文,中文,都是按两个字节存储
varchar(max)和nvarchar(max) sqlserver2005版本之后支持
varchar(max):相当于text,支持like,也支持原本text不支持的数据库函数,兼容性好
nvarchar(max):相当于ntext,支持like,也支持原本text不支持的数据库函数,兼容性好
15:extractvalue() :对XML文档进行查询的函数
extractvalue() :对XML文档进行查询的函数
语法:extractvalue(目标xml文档,xml路径)
第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。
16 updatexml()的报错注入
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
17 case when
Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
Case when 相当于一个自定义的数据透视表,group by 是行名,case when 负责列名。
CASE语句有两种形式:第一种评估一个或多个条件,并返回第一个条件为true的结果。如果没有条件为真,则返回ELSE后的结果,如果没有ELSE部分,则返回NULL:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END;
第二个CASE语法返回第一个value = compare_value比较结果为true的结果。如果没有比较为真,则返回ELSE后的结果,如果没有ELSE部分,则返回NULL:
CASE compare_value
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END;
17 like 的用法(模糊查询)
直接上图
6位反回1,查询成功
18 xor
id=1' xor '1'=2
id=0'XOR(if(now()=sysdate() && 87=87,sleep(3),0))XOR'Z
网友评论