美文网首页
sql函数(mysql)

sql函数(mysql)

作者: 喵了个咪0 | 来源:发表于2020-03-02 14:07 被阅读0次

    函数:

    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

    相关文章

      网友评论

          本文标题:sql函数(mysql)

          本文链接:https://www.haomeiwen.com/subject/xqcmkhtx.html