Cast函数和操作符--MySql数据库

    • BINARY

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

    mysql>SELECT 'a' = 'A';

            -> 1

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

            -> 0

    mysql>SELECT 'a' = 'a ';

            -> 1

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

            -> 0

    BINARY影响整个比较;它可以在任何操作数前被给定,而产生相同的结果。

    BINARYstr是CAST(strAS BINARY)的缩略形式。

    注意,在一些语境中,假如你将一个编入索引的列派给BINARY, MySQL将不能有效使用这个索引。

    假如你想要将一个BLOB值或其它二进制字符串进行区分大小写的比较,你可利用二进制字符串没有字符集这一事实实现这个目的,这样就不会有文书夹的概念。为执行一个区分大小写的比较,可使用  CONVERT()函数将一个字符串值转化为一个不区分大小写的字符集。其结果为一个非二进制字符串,因此LIKE操作也不会区分大小写:

    SELECT 'A' LIKE CONVERT(blob_colUSING latin1) FROMtbl_name;

    若要使用一个不同的字符集,替换其在上述语句中的latin1名。

    CONVERT()一般可用于比较出现在不同字符集中的字符串。

    • CAST(exprAStype), CONVERT(expr,type) , CONVERT(exprUSINGtranscoding_name)

    CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。

    这个类型可以是以下值其中的 一个: 

      • BINARY[(N)]
      • CHAR[(N)]
      • DATE
      • DATETIME
      • DECIMAL
      • SIGNED [INTEGER]
      • TIME
      • UNSIGNED [INTEGER]

    BINARY产生一个二进制字符串。关于它怎样影响比较结果的说明见本章中BINARY操作符项。

    假如给定了随意长度N,则BINARY[N]使cast使用该参数的不多于N个字节。同样的,CHAR[N]会使cast使用该参数的不多于N个字符。

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

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

    SELECT CONVERT('abc' USING utf8);

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

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

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

    SELECTenum_colFROMtbl_nameORDER BY CAST(enum_colAS CHAR);

    CAST(strAS BINARY)和BINARYstr相同CAST(exprAS CHAR)将表达式视为一个带有默认字符集的字符串。

    若用于一个诸如CONCAT('Date: ',CAST(NOW() AS DATE))这样的比较复杂的表达式的一部分,CAST()也会改变结果。

    你不应在不同的格式中使用CAST()来析取数据,但可以使用诸如LEFT()或EXTRACT()的样的字符串函数来代替。请参见12.5节,“日期和时间函数”。

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

    mysql>SELECT 1+'1';

           -> 2

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

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

            -> 'hello you 2'

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

    mysql>SELECT CAST(1-2 AS UNSIGNED)

            -> 18446744073709551615

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

            -> -1

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

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

            -> -1.0

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

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值