MySQL基础教程11 —— 函数之Cast函数和操作符
2018-07-13 08:46:54来源:编程学习网 阅读 ()
- 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影响整个比较;它可以在任何操作数前被给定,而产生相同的结果。
BINARY?str?是CAST(str?AS BINARY)的缩略形式。
注意,在一些语境中,假如你将一个编入索引的列派给BINARY, MySQL?将不能有效使用这个索引。
假如你想要将一个?BLOB值或其它二进制字符串进行区分大小写的比较,你可利用二进制字符串没有字符集这一事实实现这个目的,这样就不会有文书夹的概念。为执行一个区分大小写的比较,可使用? CONVERT()函数将一个字符串值转化为一个不区分大小写的字符集。其结果为一个非二进制字符串,因此?LIKE?操作也不会区分大小写:
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?产生一个二进制字符串。关于它怎样影响比较结果的说明见本章中?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?结果:
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()?的样的字符串函数来代替。请参见“日期和时间函数”。
若要在数值语境中将一个字符串派给一个数值,?通常情况下,除了将字符串值作为数字使用外,你不需要做任何事:
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
若你在一个算术运算中使用了一个字符串,它会被转化为一个浮点数。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- MySQL replace函数怎么替换字符串语句 2020-03-09
- PHP访问MySQL查询超时怎么办 2020-03-09
- mysql登录时闪退 2020-02-27
- MySQL出现1067错误号 2020-02-27
- mysql7.x如何单独安装mysql 2020-02-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash