mysql cast convert_mysql cast和convert函数

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

1

CAST(valueastype);

2

CONVERT(value, type);

就是

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

二进制,同带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 类型) ,

MYSQL Cast函数是非常重要的MYSQL函数,下面就将为您详细介绍

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值