php 2007-8-20 09:26
MYSQL部分函数与操作符
MYSQL进行数值比较的规则:
1.若有一个或两个参数为 NULL,[color=#ff12]除非NULL-safe <=> 等算符,则比较运算的结果为NULL[/color]。
2.若同一个比较运算中的两个参数都是字符串,则按照字符串进行比较。若两个参数均为整数,则按照整数进行比较。
3.[color=#080ff]十六进制值在不需要作为数字进行比较时,则按照二进制字符串进行处理[/color]。
4.假如参数中的一个为 TIMESTAMP 或 DATETIME 列,而其它参数均为常数, 则在进行比较前将常数转为 [color=#080ff]timestamp[/color]。这样做的目的是为了使ODBC的进行更加顺利。
注意,[color=#ff12]这不适合IN()中的参数![/color]为了更加可靠,在进行对比时通常使用完整的 datetime/date/time字符串。
[color=#ff12] 5.在其它情况下,参数作为浮点数进行比较[/color]。
在默认状态下,字符串比较不区分大小写,并使用现有字符集(默认为cp1252 Latin1,同时对英语也适合)
[color=#080ff]<=> [/color]
NULL-safe equal.这个操作符和=操作符执行相同的比较操作,不过在两个操作码均为NULL时,其所得值为1而不为NULL,而当一个操作码为NULL时,其所得值为0而不为NULL。
[color=#080ff]<>[/color]
不等于,不是使用!=。
[color=#080ff]IS [/color][i]boolean_value[/i][color=#080ff] IS NOT [/color][i][color=#080ff]boolean_value[/color]
[/i]根据一个bool值来检验值。布尔值可以是TRUE、FALSE或UNKNOWN。如
mysql> [b]SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;[/b]
-> 1, 1, 1
MYSQL支持IS NULL的一些额外特性:
在一个值产生后,立即运行一个以下格式的语句,从而找到最新AUTO_INCREMENT 值的所在行:
SELECT * FROM [i]tbl_name[/i] WHERE [i]auto_col[/i] IS NULL
对于命名为NOT NULL 的DATE 和DATETIME列,可通过使用如下的 语句找到特定日期 '0000-00-00':
SELECT * FROM [i]tbl_name[/i] WHERE [i]date_column[/i] IS NULL
(运行这一步需要使用一些 ODBC 应用软件,因为 ODBC本身不支持 一个 '0000-00-00'的时间值。
)
[color=#080ff]COALESCE([/color][i]value[/i][color=#080ff],...)[/color]
返回值为列表当中的第一个非 NULL值,在没有非NULL 值得情况下返回值为 NULL 。
[color=#080ff]GREATEST([i]value1[/i],[i]value2[/i],...)[/color]
当有2或多个参数时,返回值为最大(最大值的)参数。比较参数所依据的规律同LEAST()相同.
[color=#080ff]INTERVAL([/color][i]N[/i][color=#080ff],[/color][i]N1[/i][color=#080ff],[/color][i]N2[/i][color=#080ff],[/color][i]N3[/i][color=#080ff],...)
[/color] 假如[i]N[/i] < [i]N1[/i][i],[/i]则返回值为0;假如[i]N[/i] < [i]N2[/i] 等等,则返回值为1;假如[i]N[/i]
为NULL,则返回值为 -1 。所有的参数均按照整数处理。为了这个函数的正确运行,必须满足 [i]N1[/i] < [i]N2[/i] < [i]N3[/i] < ……< [i]Nn[/i] 。其原因是使用了二分查找(极快速).如:
mysql> [b]SELECT INTERVAL(10, 1, 10, 100, 1000);[/b]
-> 2
[color=#080ff]LEAST([/color][i]value1[/i][color=#080ff],[/color][i]value2[/i][color=#080ff],...)[/color]
在有两个或多个参数的情况下, 返回值为最小 (最小值)
参数。用一下规则将自变量进行对比:
1.假如返回值被用在一个 INTEGER 语境中,或是所有参数均为整数值,则将其作为整数值进行比
2.较。假如返回值被用在一个 REAL语境中,或所有参数均为实值,则 将其作为实值进行比较。
3.假如任意一个参数是一个区分大小写的字符串,则将参数按照区分大小写的字符串进行比较。
4.在其它 情况下,将参数作为区分大小写的字符串进行比较。
假如任意一个自变量为NULL,则 LEAST()的返回值为NULL 。
[color=#080ff]XOR[/color]
逻辑XOR。当任意一个操作数为 NULL时,返回值为NULL。对于非 NULL 的操作数,假如一个奇数操作数为非零值,则计算所得结果为 1 ,否则为 0 。
[color=#080ff]ASCII([/color][i]str[/i][color=#080ff])[/color]
返回值为字符串[i]str[/i]
的最左字符的数值。假如[i]str[/i]为空字符串,则返回值为 0 。假如[i]str[/i]
为NULL,则返回值为 NULL。 ASCII()用于带有从 0到255的数值的字符。
[color=#080ff]BIN(N)[/color]
返回值为[i]N[/i]的二进制值的字符串表示,其中 [i]N[/i] 为一个longlong (BIGINT) 数字。这等同于 CONV([i]N[/i],10,2)。假如[i]N[/i]
为NULL,则返回值为 NULL。
[color=#080ff]BIT_LENGTH([/color][i]str[/i][color=#080ff])[/color]
返回值为二进制的字符串[i]str [/i]长度。
[color=#080ff]CHAR([i]N[/i],... [USING [i]charset[/i]])[/color]
CHAR()将每个参数[i]N[/i]理解为一个整数,其返回值为一个包含这些整数的代码值所给出的字符的字符串。NULL值被省略。
大于 255的CHAR()参数被转换为多结果字符。 例如,CHAR(256) 相当于 CHAR(1,0), 而CHAR(256*256) 则相当于 CHAR(1,0,0).
CHAR()的返回值为一个二进制字符串。可选择使用USING语句产生一个给出的字符集中的字符串:
mysql> [b]SELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8));[/b]
CHAR_LENGTH([i]str[/i])和 CHARACTER_LENGTH([i]str[/i])
返回值为字符串[i]str[/i]
的长度,长度的单位为字符。一个多字节字符算作一个单字符。[i]对于一个[/i]包含五个二字节字符集, LENGTH()返回值为 10, 而CHAR_LENGTH()的返回值为5。
COMPRESS([i]string_to_compress[/i])
压缩一个字符串。这个函数要求 MySQL已经用一个诸如zlib的压缩库压缩过。
否则,返回值始终是NULL。UNCOMPRESS() 可将压缩过的字符串进行解压缩。
压缩后的字符串的内容按照以下方式存储:
空字符串按照空字符串存储。
非空字符串未压缩字符串的四字节长度进行存储(首先为低字节),后面是压缩字符串。如果字符串以空格结尾,就会在后加一个"."号,以防止当结果值是存储在CHAR或VARCHAR类型的字段列时,出现自动把结尾空格去掉的现象。(不推荐使用 CHAR 或VARCHAR 来存储压缩字符串。最好使用一个 BLOB 列代替)。
[color=#080ff] CONCAT_WS([/color][i]separator[/i][color=#080ff],[/color][i]str1[/i][color=#080ff],[/color][i]str2[/i][color=#080ff],...)[/color]
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。
第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。 CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
[color=#080ff]LENGTH([/color][i]str[/i][color=#080ff])[/color]
返回值为字符串[i]str[/i]
的长度,单位为字节。一个多字节字符算作多字节。这意味着 对于一个包含5个2字节字符的字符串, LENGTH() 的返回值为 10, 而 CHAR_LENGTH()的返回值则为5。
[color=#080ff]LOAD_FILE([/color][i]file_name[/i][color=#080ff])[/color]
读取文件并将这一文件按照字符串的格式返回。 文件的位置必须在服务器上,你必须为文件制定路径全名,而且你还必须拥有FILE 特许权。文件必须可读取,文件容量必须小于 max_allowed_packet字节。
若文件不存在,或因不满足上述条件而不能被读取, 则函数返回值为 NULL。 INSTR([i]str[/i],[i]substr[/i])
返回字符串 [i]str[/i]
中子字符串的第一个出现位置。这和LOCATE()的双参数形式相同,除非参数的顺序被颠倒。
LPAD([i]str[/i],[i]len[/i],[i]padstr[/i])--从右对应的是RPAD
返回字符串 [i]str[/i], 其左边由字符串[i]padstr[/i]
填补到[i]len[/i]
字符长度。假如[i]str[/i]
的长度大于[i]len[/i], 则返回值被缩短至 [i]len[/i]
字符。
MID([i]str[/i],[i]pos[/i],[i]len[/i])
MID([i]str[/i],[i]pos[/i],[i]len[/i]) 是 SUBSTRING([i]str[/i],[i]pos[/i],[i]len[/i])的同义词。
SUBSTRING([i]str[/i],[i]pos[/i])
SUBSTRING([i]str[/i] FROM [i]pos[/i])
SUBSTRING([i]str[/i],[i]pos[/i],[i]len[/i])
SUBSTRING([i]str[/i] FROM [i]pos[/i] FOR [i]len[/i])
不带有[i]len[/i]
参数的格式从字符串[i]str[/i]返回一个子字符串,起始于位置 [i]pos[/i]。带有[i]len[/i]参数的格式从字符串[i]str[/i]返回一个长度同[i]len[/i]字符相同的子字符串,起始于位置 [i]pos[/i]。 使用 FROM的格式为标准 SQL 语法。也可能对[i]pos[/i]使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的[i]pos[/i]
字符,而不是字符串的开头位置。
[color=#080ff]SUBSTRING_INDEX([/color][i]str[/i][color=#080ff],[/color][i]delim[/i][color=#080ff],[/color][i]count[/i][color=#080ff])[/color]
在定界符 [i]delim[/i]
以及[i]count[/i]
出现前,从字符串[i]str[/i]返回自字符串。若[i]count[/i]为正值,则返回最终定界符(从左边开始)左边的一切内容。若[i]count[/i]为负值,则返回定界符(从右边开始)右边的一切内容。
[color=#080ff]TRIM([{BOTH | LEADING | TRAILING} [[i]remstr[/i]] FROM] [i]str[/i]) TRIM([i]remstr[/i] FROM] [i]str[/i])[/color]
返回字符串 [i]str[/i]
, 其中所有[i]remstr[/i]
前缀和/或后缀都已被删除。若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH 。 [i]remstr[/i]
为可选项,在未指定情况下,可删除空格。 PASSWORD([i]str[/i])
从原文密码[i]str[/i]
计算并返回密码字符串,当参数为 NULL 时返回 NULL。这个函数用于用户授权表的Password列中的加密MySQL密码存储 mysql> [b]SELECT PASSWORD('badpwd');[/b]
-> '7f84554057dd964b'
PASSWORD() 加密是单向的 (不可逆 )。