正在加载......
类别:MySQL学习  时间: 2008-08-15 00:06:10; 浏览: 43778; 评论: 1  

    发现许多mysql的基础知识掌握不是很牢固,手头一本《SQL必知必会》,就参照它,另外再自己做一些扩展学习吧。

    以下基本来源手册:第12章:函数和操作符。作为笔记而记录吧。

==========================================================

    除非在文档编制中对一个函数或操作符另有指定的情况外,一个包含NULL 的表达式通常产生一个NULL 值。

    在默认状态下, 在函数和紧随其后的括号之间不得存在空格。这能帮助  MySQL 分析程序区分一些同函数名相同的函数调用以及表或列。不过,函数自变量周围允许有空格出现。

    可以通过选择--sql-mode=IGNORE_SPACE来打开MySQL服务器的方法使服务器接受函数名后的空格。 个人客户端程序可通过选择mysql_real_connect()的CLIENT_IGNORE_SPACE 实现这一状态。在以上两种情况中, 所有的函数名都成为保留字。请参见5.3.2节,“SQL服务器模式”. 

    MySQL按照以下规则进行数值比较

以下是引用片段:
若有一个或两个参数为 NULL,除非NULL-safe <=> 等算符,则比较运算的结果为NULL。

若同一个比较运算中的两个参数都是字符串,则按照字符串进行比较。

若两个参数均为整数,则按照整数进行比较。 

十六进制值在不需要作为数字进行比较时,则按照二进制字符串进行处理。

假如参数中的一个为 TIMESTAMP 或 DATETIME 列,而其它参数均为常数, 则在进行比较前将常数转为 timestamp。这样做的目的是为了使ODBC的进行更加顺利。 注意,这不适合IN()中的参数!为了更加可靠,在进行对比时通常使用完整的 datetime/date/time字符串。

在其它情况下,参数作为浮点数进行比较。  

在默认状态下,字符串比较不区分大小写,并使用现有字符集(默认为cp1252 Latin1,同时对英语也适合)。

为了进行比较,可使用CAST()函数将某个值转为另外一种类型。 使用CONVERT()将字符串值转为不同的字符集

    注意,在将一个字符串列同一个数字进行比较时, MySQL 不能使用列中的索引进行快速查找。假如str_col 是一个编入索引的字符串列,则在以下语句中,索引不能执行查找功能:

以下是代码片段:
SELECT * FROM tbl_name WHERE str_col=1;

    其原因是许多不同的字符串都可被转换为数值 1: '1'、 ' 1'、 '1a'、 ……

    以下记录一些我没见过或不熟悉的操作符:

    IS boolean_value IS NOT boolean_value

    根据一个布尔值来检验一个值,在这里,布尔值可以是TRUE、FALSE或UNKNOWN。

以下是代码片段:
mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;
        -> 1, 1, 1
mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;
        -> 1, 1, 0

    IS NULL IS NOT NULL

    检验一个值是否为 NULL。

以下是代码片段:
mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
        -> 0, 0, 1
mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
        -> 1, 1, 0

    为了能够顺利的使用ODBC 程序工作,在使用IS NULL时,MySQL支持一下额外特性:

    在一个值产生后,立即运行一个以下格式的语句,从而找到最新AUTO_INCREMENT 值的所在行:

以下是代码片段:
SELECT * FROM tbl_name WHERE auto_col IS NULL


    当设置SQL_AUTO_IS_NULL=0时,这项操作无法运行。请参见13.5.3节,“SET语法”。

   对于命名为NOT NULL 的DATE 和DATETIME列,可通过使用如下的 语句找到特定日期 '0000-00-00':

以下是代码片段:
SELECT * FROM tbl_name WHERE date_column IS NULL

    运行这一步需要使用一些 ODBC 应用软件,因为 ODBC本身不支持 一个 '0000-00-00'的时间值。 

    expr BETWEEN min AND max

    假如expr大于或等于 min 且expr 小于或等于max, 则BETWEEN 的返回值为1,或是0。若所有参数都是同一类型,则上述关系相当于表达式   (min <= expr AND expr <= max)。其它类型的转换根据本章开篇所述规律进行,且适用于3种参数中任意一种。 

以下是代码片段:
mysql> SELECT 1 BETWEEN 2 AND 3;
        -> 0
mysql> SELECT 'b' BETWEEN 'a' AND 'c';
        -> 1
mysql> SELECT 2 BETWEEN 2 AND '3';
        -> 1
mysql> SELECT 2 BETWEEN 2 AND 'x-3';
        -> 0


    expr NOT BETWEEN min AND max

    这相当于NOT(expr BETWEEN min AND max)。

    COALESCE(value,...)

    返回值为列表当中的第一个非 NULL值,在没有非NULL 值得情况下返回值为 NULL 。

以下是代码片段:
mysql> SELECT COALESCE(NULL,1);
        -> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
        -> NULL

    GREATEST(value1,value2,...)

    当有2或多个参数时,返回值为最大(最大值的)参数。比较参数所依据的规律同LEAST()相同。

以下是代码片段:
mysql> SELECT GREATEST(2,0);
        -> 2
mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);
        -> 767.0
mysql> SELECT GREATEST('B','A','C');
        -> 'C'


    在没有自变量为NULL的情况下,GREATEST()的返回值为NULL。

    ISNULL(expr)

    如expr 为NULL,那么ISNULL() 的返回值为 1,否则返回值为 0。

以下是代码片段:
mysql> SELECT ISNULL(1+1);
        -> 0
mysql> SELECT ISNULL(1/0);
        -> 1


    使用= 的NULL 值对比通常是错误的。

    ISNULL() 函数同 IS NULL比较操作符具有一些相同的特性。请参见有关IS NULL 的说明。

    INTERVAL(N,N1,N2,N3,...)

    假如N < N1,则返回值为0;假如N < N2 等等,则返回值为1;假如N 为NULL,则返回值为 -1 。所有的参数均按照整数处理。为了这个函数的正确运行,必须满足 N1 < N2 < N3 < ……< Nn 。其原因是使用了二分查找(极快速)。

以下是代码片段:
mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
        -> 3
mysql> SELECT INTERVAL(10, 1, 10, 100, 1000);
        -> 2
mysql> SELECT INTERVAL(22, 23, 30, 44, 200);
        -> 0

    LEAST(value1,value2,...)

    在有两个或多个参数的情况下, 返回值为最小 (最小值) 参数。用一下规则将自变量进行对比:
假如返回值被用在一个 INTEGER 语境中,或是所有参数均为整数值,则将其作为整数值进行比较。

    假如返回值被用在一个 REAL语境中,或所有参数均为实值,则 将其作为实值进行比较。
假如任意一个参数是一个区分大小写的字符串,则将参数按照区分大小写的字符串进行比较。
在其它情况下,将参数作为区分大小写的字符串进行比较。

    假如任意一个自变量为NULL,则 LEAST()的返回值为NULL 。

以下是代码片段:
mysql> SELECT LEAST(2,0);
        -> 0
mysql> SELECT LEAST(34.0,3.0,5.0,767.0);
        -> 3.0
mysql> SELECT LEAST('B','A','C');
        -> 'A'

    注意,上面的转换规则在一些边界情形中会产生一些奇特的结果:  

以下是代码片段:
mysql> SELECT CAST(LEAST(3600, 9223372036854775808.0) as SIGNED);
        -> -9223372036854775808

    发生这种情况的原因是MySQL在整数语境中读取9223372036854775808.0。整数表示法不利于保存数值,因此它包括一个带符号整数。

也许您对下面的文章感兴趣:
类别:Linux/Unix  时间: 2008-08-06 23:22:38; 浏览: 54820; 评论: 0  

    使用vim编辑你的程序,如php、c、c++程序,如果没有颜色,相信你会在linux下使用文本编辑程序而感到厌烦。

    这时可更改linux下的终端环境变量TERM,可以使用命令“env”查看TERM的值:

以下是代码片段:
[root@login testing]# env
......
TERM=vt100
......

    更改它的值为“linux”:

以下是代码片段:
[root@login testing]# export TERM=linux

    对于TERM的说法,我也不甚了解。不过你可以man一下看看。对于它可能的值,从网上一篇文章看到可以从这个目录下的文件看到:

以下是引用片段:
/usr/share/terminfo/v/v

    对于“export”,说明如下:

以下是引用片段:

export

语  法:export [-fnp][变量名称]=[变量设置值]

补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。

参  数
 -f  代表[变量名称]中为函数名称。
 -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
 -p  列出所有的shell赋予程序的环境变量。


也许您对下面的文章感兴趣:
类别:MySQL学习  时间: 2008-08-05 10:41:22; 浏览: 24439; 评论: 0  
Tags : MySQL PHP trim

    作为黄金搭档,PHP和MySQL都有自己的删除空白函数,而且函数名字也一样:trim(), ltrim(), rtrim()。当然,作为编程语言,PHP删除空白函数更为强大。

    对 ltrim()和rtrim(),从其英语解释来看:

以下是引用片段:
PHP为:Strip whitespace (or other characters)
MySQL为:space characters removed

    显然,PHP还可以有“other characters”,而且PHP的函数还可以用第二个参数自定义要删除的字符。

    对“other characters”,手册解释为:

以下是引用片段:
  • " " (ASCII 32 (0x20)), an ordinary space.
  • "\t" (ASCII 9 (0x09)), a tab.
  • "\n" (ASCII 10 (0x0A)), a new line (line feed).
  • "\r" (ASCII 13 (0x0D)), a carriage return.
  • "\0" (ASCII 0 (0x00)), the NUL-byte.
  • "\x0B" (ASCII 11 (0x0B)), a vertical tab.
  •     不过,MySQL的trim()函数也增加了对其他字符的删除。具体请见下面从手册上摘抄的解释。

    = = = = = = = = = = = = = 方便阅读的分隔线  = = = = = = = = = = = = = = = =

        以下为MySQL的函数解释

        LTRIM(str) 

        Returns the string str with leading space characters removed.

    以下是代码片段:
    mysql> SELECT LTRIM('  barbar');
            -> 'barbar'


        This function is multi-byte safe.

        RTRIM(str)

        Returns the string str with trailing space characters removed.

    以下是代码片段:
    mysql> SELECT RTRIM('barbar   ');
            -> 'barbar'

        This function is multi-byte safe.

        TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str)

        Returns the string str with all remstr prefixes or suffixes removed. If none of the specifiers BOTH, LEADING, or TRAILING is given, BOTH is assumed. remstr is optional and, if not specified, spaces are removed.

    以下是代码片段:
    mysql> SELECT TRIM('  bar   ');
            -> 'bar'
    mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
            -> 'barxxx'
    mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
            -> 'bar'
    mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
            -> 'barx'

        This function is multi-byte safe.

        参考:
        php手册
        mysql中英文手册:
        http://dev.mysql.com/doc/refman/5.1/zh/functions.html
        http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_trim

    也许您对下面的文章感兴趣:
    类别:MySQL学习  时间: 2008-08-04 16:31:18; 浏览: 34760; 评论: 0  
    类别:随便说说  时间: 2008-07-10 14:59:43; 浏览: 19487; 评论: 0  
    类别:Linux/Unix  时间: 2008-07-09 13:21:34; 浏览: 201539; 评论: 3  
    Tags : crontab Linux
    类别:随便说说  时间: 2008-07-07 22:40:32; 浏览: 69635; 评论: 0  
    Tags : 生活 学习
    类别:MySQL学习  时间: 2008-06-16 20:06:38; 浏览: 25918; 评论: 1  
    Tags : away MySQL
    类别:本站点滴  时间: 2008-06-15 16:38:36; 浏览: 13297; 评论: 0  
    类别:随便说说  时间: 2008-06-05 19:43:55; 浏览: 51513; 评论: 0  
    [199][7/20][|<][3][4][5][6][7][8][9][10][11][12][>|] | 回页首
    © 2004 - 2020 芽雨快跑 - 本页面所有内容,未经芽雨许可,欢迎转载,请注明出处

    京ICP备09017802号