zoukankan      html  css  js  c++  java
  • mysql cast和convert函数

    MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。两者具体的语法如下:

    1

    CAST(valueastype);

    2

    CONVERT(value, type);

    就是CAST(xxx AS 类型), CONVERT(xxx,类型)。

    可以转换的类型是有限制的。这个类型可以是以下值其中的一个:

    • 二进制,同带binary前缀的效果 : BINARY   
    • 字符型,可带参数 : CHAR()    
    • 日期 : DATE    
    • 时间: TIME    
    • 日期时间型 : DATETIME    
    • 浮点数 : DECIMAL     
    • 整数 : SIGNED    
    • 无符号整数 : UNSIGNED

    下面举几个例子:

    例一

    1

    mysql>SELECTCONVERT('23',SIGNED);

    2

    +----------------------+

    3

    |CONVERT('23',SIGNED) |

    4

    +----------------------+

    5

    |                   23 |

    6

    +----------------------+

    7

    1 rowinset

               

    例二

    1

    mysql>SELECTCAST('125e342.83'ASsigned);

    2

    +------------------------------+

    3

    |CAST('125e342.83'ASsigned) |

    4

    +------------------------------+

    5

    |                          125 |

    6

    +------------------------------+

    7

    1 rowinset

               

    例三

    1

    mysql>SELECTCAST('3.35'ASsigned);

    2

    +------------------------+

    3

    |CAST('3.35'ASsigned) |

    4

    +------------------------+

    5

    |                      3 |

    6

    +------------------------+

    7

    1 rowinset

               

    像上面例子一样,将varchar 转为int 用 cast(a as signed),其中a为varchar类型的字符串。

    例4

    在SQL Server中,下面的代码演示了datetime变量中,仅包含单纯的日期和单纯的时间时,日期存储的十六进制存储表示结果。

    01

    DECLARE @dt datetime

    02

    03

    --单纯的日期

    04

    SET @dt='1900-1-2'

    05

    SELECT CAST(@dtasbinary(8))

    06

    --结果: 0x0000000100000000

    07

    08

    --单纯的时间

    09

    SET @dt='00:00:01'

    10

    SELECT CAST(@dtasbinary(8))

    11

    --结果: 0x000000000000012C

                     

    MySQL的类型转换和SQL Server一样,就是类型参数有点点不同:CAST(xxx AS 类型) , CONVERT(xxx,类型)。

    MYSQL Cast函数是非常重要的MYSQL函数,下面就将为您详细介绍MYSQL Cast函数的语法及其使用,希望能让您对MYSQL Cast函数有更多的认识。

    BINARY   
     BINARY操作符将后面的字符串抛给一个二进制字符串。这是一种简单的方式来促使逐字节而不是逐字符的进行列比较。这使得比较区分大小写,即使该列不被定义为BINARY或BLOB。BINARY也会产生结尾空白,从而更加显眼。 

    1         mysql>   SELECT   'a'   =   'A';    

    2               

    3                           ->   1    

    4               

    5         mysql>   SELECT   BINARY   'a'   =   'A';    

    6                            ->   0    

    7         mysql>   SELECT   'a'   =   'a   ';    

    8                            ->   1    

    9         mysql>   SELECT   BINARY   'a'   =   'a   ';    

    10                        ->   0   

    BINARY影响整个比较;它可以在任何操作数前被给定,而产生相同的结果。   
       
    BINARY   str是CAST(str   AS   BINARY)的缩略形式。 
      
    注意,在一些语境中,假如你将一个编入索引的列派给BINARY,   MySQL将不能有效使用这个索引。   
     假如你想要将一个BLOB值或其它二进制字符串进行区分大小写的比较,你可利用二进制字符串没有字符集这一事实实现这个目的,这样就不会有文书夹的概念。 为执行一个区分大小写的比较,可使用CONVERT()函数将一个字符串值转化为一个不区分大小写的字符集。其结果为一个非二进制字符串,因此LIKE操 作也不会区分大小写:  

    11     SELECT   'A'   LIKE   CONVERT(blob_col   USING   latin1)   FROM   tbl_name;    

    若要使用一个不同的字符集,   替换其在上述语句中的latin1名。 
      
    CONVERT()一般可用于比较出现在不同字符集中的字符串。    
     CAST(expr   AS   type),   CONVERT(expr,type)   ,   CONVERT(expr   USING   transcoding_name)   
     CAST()   和CONVERT()   函数可用来获取一个类型的值,并产生另一个类型的值。   
       
    这个类型   可以是以下值其中的一个:      
     BINARY[(N)]   
     CHAR[(N)]   
     DATE   
     DATETIME   
     DECIMAL   
     SIGNED   [INTEGER]   
     TIME   
     UNSIGNED   [INTEGER]   
     BINARY   产生一个二进制字符串。
      
    假如给定了随意长度N,则 BINARY[N] 使cast使用该参数的不多于   N   个字节。同样的,CHAR[N]会使cast使用该参数的不多于N   个字符。   

    12     CAST()   and   CONVERT(...   USING   ...)   是标准SQL语法。CONVERT()的非USING   格式是ofis   ODBC语法。 

    带有USING的CONVERT()   被用来在不同的字符集之间转化数据。在MySQL中,   自动译码名和相应的字符集名称相同。例如。   这个语句将服务器的默认字符集中的字符串   'abc'转化为utf8字符集中相应的字符串:  

    13     SELECT   CONVERT('abc'   USING   utf8);   

    当你想要在一个CREATE   ...   SELECT   语句中创建一个特殊类型的列,则cast函数会很有用:   

    14     CREATE   TABLE   new_table   SELECT   CAST('2000-01-01'   AS   DATE);   

    该函数也用于ENUM   列按词法顺序的排序。通常ENUM列的排序在使用内部数值时发生。将这些值按照词法顺序派给   CHAR   结果:  

    15     SELECT   enum_col   FROM   tbl_name   ORDER   BY   CAST(enum_col   AS   CHAR);   


    CAST(str   AS   BINARY)和BINARY   str相同。 CAST(expr   AS   CHAR)将表达式视为一个带有默认字符集的字符串。   
       
    若用于一个诸如CONCAT('Date:   ',CAST(NOW()   AS   DATE))这样的比较复杂的表达式的一部分,CAST()也会改变结果。 
       
    你不应在不同的格式中使用CAST()来析取数据,但可以使用诸如LEFT() 或 EXTRACT() 的字符串函数来代替。  

    若要在数值语境中将一个字符串派给一个数值,   通常情况下,除了将字符串值作为数字使用外,你不需要做任何事:  

    16     mysql>   SELECT   1+'1';    

    17                     ->   2   

    若要在一个字符串语境中使用一个数字,该数字会被自动转化为一个BINARY   字符串。  

    18     mysql>   SELECT   CONCAT('hello   you   ',2);    

    19                       ->   'hello   you   2'   

    MySQL支持带符号和无符号的64比特值的运算。若你正在使用数字操作符(如   +)  而其中一个操作数为无符号整数,则结果为无符号。可使用SIGNED   和UNSIGNED   cast   操作符来覆盖它。将运算分别派给带符号或无符号64比特整数。

    20     mysql>   SELECT   CAST(1-2   AS   UNSIGNED)    

    21                       ->   18446744073709551615    

    22     mysql>   SELECT   CAST(CAST(1-2   AS   UNSIGNED)   AS   SIGNED);    

    23                       ->   -1   

    注意,假如任意一个操作数为一个浮点值,则结果为一个浮点值,且不会受到上述规则影响   (关于这一点, DECIMAL 列值被视为浮点值)。    

    24     mysql>   SELECT   CAST(1   AS   UNSIGNED)   -   2.0;    

    25                       ->   -1.0    

    26          

    若你在一个算术运算中使用了一个字符串,它会被转化为一个浮点数。

  • 相关阅读:
    SQL Server游标的使用
    SQL函数说明大全
    基本数据结构:链表(list)
    QT+C++实现连连看
    printf按8进制、16进制输出
    关于数据库优化问题收集
    SQL Server 查询处理中的各个阶段(SQL执行顺序) 转
    MFC消息机制
    _T() 和_L() _TEXT __T,L区别与联系详解
    Windows 各种控件使用心得
  • 原文地址:https://www.cnblogs.com/fanfan259/p/2921852.html
Copyright © 2011-2022 走看看