|
用于SELECT和WHERE子句的SQL函数
|
|
来源:网络 作者:本站整理 发布时间:2007-06-18
|
|
或
CONVERT(expression,type)
type 可以是下面的任一个:
* BINARY * CHAR (4.0.6 中新加入) * DATE * DATETIME * SIGNED {INTEGER} * TIME * UNSIGNED {INTEGER}
CAST() 是 ANSI SQL99 的句法,CONVERT() 是 ODBC 的句法。
CAST 函数主要用于以特殊的 CREATE ... SELECT 形式建立一个列时:
CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE);
CAST(string AS BINARY 与 BINARY string 是相同的。 CAST(expr AS CHAR 表示一个使用当前默认字符集的字符串。
为了将一个字符串转换成一个数字值,通常不需要做任何事情;只要将字符串值当做一个数字即可:
mysql> SELECT 1+'1'; -> 2
如果在一个字符串语境中使用一个数字,该数字会被自动地转换为一个 BINARY 字符串。
mysql> SELECT CONCAT("hello you ",2); -> "hello you 2"
MySQL 支持两方是有符号的和无符号的 64 位值的算术运算。如果你使用一个数字操作符(比如 +),并且其中的一个操作数是 unsigned integer,那么结果将是无符号的。为了不考虑这些问题,你可以使用 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
如果在一个算术运算中使用一个字符串,它将被转换为一个浮点数字。
函数 CAST() 和 CONVERT() 在 MySQL 4.0.2 中被加入。
为了完全支持 BIGINT,在 MySQL 4.0 中对无符号值的处理发生了改变。如果希望你的代码在 MySQL 4.0 和 3.23 中均能够正常运行(在这种情况下,你或许不能够使用 CAST 函数),当进行两个无符号整数列的减法时,你可以使用下面的技巧得到一个有符号的结果:
SELECT (unsigned_column_1+0.0)-(unsigned_column_2+0.0);
这个做法是在进行减法之前,先将无符号列转换为一个浮点数。
如果你将旧的 MySQL 应用程序移植到 MySQL 4.0 时,在 UNSIGNED 列上出现了问题,你可以在启动 mysqld 时使用 --sql-mode=NO_UNSIGNED_SUBTRACTION 选项。注意,只要你使用了这个选项,你将不能直接地使用 UNSIGNED BIGINT 列类型。 6.3.6 其它函数 6.3.6.1 位函数
MySQL 使用 BIGINT (64 位) 算法进行位运算,因而这些操作符有一个 64 位的最大范围。
| 位或
mysql> SELECT 29 | 15; -> 31
返回值是一个 64 位的无符号整数。
& 位与
mysql> SELECT 29 & 15; -> 13
返回值是一个 64 位的无符号整数。
^ 位异或
mysql> SELECT 1 ^ 1; -> 0 mysql> SELECT 1 ^ 0; -> 1 mysql> SELECT 11 ^ 3; -> 8
返回值是一个 64 位的无符号整数。 XOR 在 MySQL 4.0.2 中被加入。
<< 左移一个长长的数字(BIGINT):
mysql> SELECT 1 << 2; -> 4
返回值是一个 64 位的无符号整数。
>> 右移一个长长的数字(BIGINT):
mysql> SELECT 4 >> 2; -> 1
返回值是一个 64 位的无符号整数。
~ 置反所有位:
mysql> SELECT 5 & ~1; -> 4
返回值是一个 64 位的无符号整数。
BIT_COUNT(N) 返回在参数 N 中嵌入的比特位数量:
mysql> SELECT BIT_COUNT(29); -> 4
6.3.6.2 辅助功能函数
DATABASE() 返回当前数据库名:
mysql> SELECT DATABASE(); -> 'test'
如果没有当前数据库,DATABASE() 返回一个空字符串。 USER() SYSTEM_USER() SESSION_USER() 返回当前 MySQL 用户名:
mysql> SELECT USER(); -> 'davida@localhost'
在 MySQL 3.22.11 或更新的版本中,返回值包含用户名和客户机的主机名。你可以象下面所示的仅取出用户名部分(无论值是否包含一个主机名部分,它均能正常工作):
mysql> SELECT SUBSTRING_INDEX(USER(),"@",1); -> 'davida'
CURRENT_USER() 返回当前会话被验证匹配的用户名:
mysql> SELECT USER(); -> 'davida@localhost' mysql> SELECT * FROM mysql.user; -> ERROR 1044: Access denied for user: '@localhost' to database 'mysql' mysql> SELECT CURRENT_USER(); -> '@localhost'
PASSWORD(str) OLD_PASSWORD(str) 从纯文本口令 str 计算一个口令字符串。这个函数用于对存储到授权表 user 的Password 列中的 MySQL 口令进行加密。
mysql> SELECT PASSWORD('badpwd'); -> '7f84554057dd964b'
PASSWORD() 加密是不可逆的。 PASSWORD() 不以与 Unix 口令加密相同的方式进行口令加密。参见 ENCRYPT()。 注意, PASSWORD() 函数是用于在 MySQL 服务中验证系统的,你不应该 在你的应用程序中使用它。你可以使用 MD5() 或 SHA1() 代替使用它。同样查看 RFC-2195 可获得有关应用程序的口令处理与安全验证的更多信息。 ENCRYPT(str[,salt]) Encrypt使用 Unix crypt() 系统调用加密 str 。参数 salt 应该是一个有两个字符的字符串,(在 MySQL 3.22.16 中,salt 可以超过两个字符。):
mysql> SELECT ENCRYPT("hello"); -> 'VxuFAJXVARROc'
如果 crypt() 在你的系统上不可用,ENCRYPT() 总是返回 NULL。 ENCRYPT() 只保留 str 中前 8 个字符,而忽略其它所有的,至少在某些系统上是这样的。这取决于底层 crypt() 系统调用的行为。
ENCODE(str,pass_str) 使用 pass_str 做为密钥加密 str。使用 DECODE() 解密结果。结果是一个与 string 一样长的二进制字符。如果希望将它保存到一个列中,请使用 BLOB 列类型。
DECODE(crypt_str,pass_str) 使用 pass_str 作为密钥解密加密后的字符串 crypt_str。crypt_str 应该是一个由 ENCODE() 返回的字符串。
MD5(string) 计算一个字符串的 MD5 128 位校验和。值作为一个 32 位的十六进制数字返回,例如,被用于一个哈希(hash)键:
mysql> SELECT MD5("testing"); -> 'ae2b1fca515949e5d54fb22b8ed95575'
这是 "RSA 数据安全公司的 MD5 消息-摘要算法"。
SHA1(string) SHA(string) 计算一个字符串的 SHA1 160 位校验和(在 RFC 3174 (Secure Hash Algorithm) 中被描述)。返回值是一个 40 位的十六进制数字,或在输入参数为 NULL 的情况下,返回值为 NULL。一个使用这个函数的可能就是用于一个哈希键。你也可以使用它作为存储密码时的密码安全函数。
(阅读次数:)
共12页: 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 10 [11] [12] 下一页
|
| 上一篇:Linux/Unix下ODBC的安装、配置与编程 下一篇:怎么备份MySQL数据库 |
|
[ 收藏]
[ 推荐]
[ 评论(0条)]
[返回顶部] [打印本页]
[关闭窗口] |
|
|
| |
|
|
|
|