数据类型和函数

6 篇文章 0 订阅
6 篇文章 0 订阅

http://www.verejava.com/?id=1717412762063

Mysql 数据类型和函数
   
知识点
  数据类型分类
    CHAR       
    VARCHAR       
    int       
    float       
    DATETIME      
    TIMESTAMP    
    TEXT        
    Blob  
   
  函数
    avg() 求平均值    
       
    count() 求返回的记录行数  
   
    max() 计算最大值  
   
    min() 计算最小值   
       
    sum() 求和      
   
    分组函数的空值 NULL    
   
    分组函数中的重复值   
   
    GROUP BY 子句     
   
1. 数据类型分类
     
  1. 字符类型
    CHAR         10       admin      10
    VARCHAR     10       admin      5
   
  2. 数值类型
    int
    float
   
  3. 日期类型
    DATE    精确到秒
    DATETIME
    TIMESTAMP 精确到毫秒
   
  4. 其他类型
    BLOB
   
  1. 字符数据类型
    1. CHAR
         
    2. VARCHAR
         
    3. float
   
    4.int
         
   
    5. 日期数据类型
         
   
     
    总结:  实际常用的类型 CHAR VARCHAR , int ,float, DATE ,datetime,TIMESTAMP 大文本 text, 机密或文件二进制数据用 : BLOB
   
    创建一个客户表 customer
     CREATE TABLE customer
      (
      id int(10),
      name VARCHAR(10),
      fund float(10,2),
      reg_time DateTime,
      oper_time timestamp,
      content text
        );
   
   
2. 函数
   
     
   
  CONV(N,from_base,to_base) 
  在不同的数字基之间变换数字。返回数字N的字符串数字,从from_base基变换为to_base基,如果任何参数是NULL,返回NULL。
参数N解释为一个整数,但是可以指定为一个整数或一个字符串。最小基是2且最大的基是36。
如果to_base是一个负数,N被认为是一个有符号数,否则,N被当作无符号数。 CONV以64位点精度工作。 
  mysql> select CONV("a",16,2);
      -> '1010'
  mysql> select CONV("6E",18,8);
      -> '172'
  mysql> select CONV(-17,10,-18);
      -> '-H'
  mysql> select CONV(10+"10"+'10'+0xa,10,10);
      -> '40'
   
     
   
  CHAR(N,...) 
  CHAR()将参数解释为整数并且返回由这些整数的ASCII代码字符组成的一个字符串。NULL值被跳过。 
  mysql> select CHAR(77,121,83,81,'76');
      -> 'MySQL'
  mysql> select CHAR(77,77.3,'77.3');
      -> 'MMM'
   
  CONCAT(str1,str2,...) 
  返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。 
  mysql> select CONCAT('My', 'S', 'QL');
      -> 'MySQL'
  mysql> select CONCAT('My', NULL, 'QL');
      -> NULL
  mysql> select CONCAT(14.3);
      -> '14.3'
   
   
  LENGTH(str) 
    
  OCTET_LENGTH(str) 
    
  CHAR_LENGTH(str) 
    
  CHARACTER_LENGTH(str) 
  返回字符串str的长度。 
  mysql> select LENGTH('text');
      -> 4
  mysql> select OCTET_LENGTH('text');
      -> 4
  注意,对于多字节字符,其CHAR_LENGTH()仅计算一次。 
  LOCATE(substr,str) 
    
  POSITION(substr IN str) 
  返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0. 
  mysql> select LOCATE('bar', 'foobarbar');
      -> 4
  mysql> select LOCATE('xbar', 'foobar');
      -> 0
   
  该函数是多字节可靠的。 
  LOCATE(substr,str,pos) 
  返回子串substr在字符串str第一个出现的位置,从位置pos开始。如果substr不是在str里面,返回0。
  mysql> select LOCATE('bar', 'foobarbar',5);
      -> 7
  这函数是多字节可靠的。 
   
  INSTR(str,substr) 
  返回子串substr在字符串str中的第一个出现的位置。这与有2个参数形式的LOCATE()相同,除了参数被颠倒。 
  mysql> select INSTR('foobarbar', 'bar');
      -> 4
  mysql> select INSTR('xbar', 'foobar');
      -> 0
  这函数是多字节可靠的。 
   
  LPAD(str,len,padstr) 
  返回字符串str,左面用字符串padstr填补直到str是len个字符长。 
  mysql> select LPAD('hi',4,'??');
      -> '??hi'
   
  RPAD(str,len,padstr) 
  返回字符串str,右面用字符串padstr填补直到str是len个字符长。 
  mysql> select RPAD('hi',5,'?');
      -> 'hi???'
   
  LEFT(str,len) 
  返回字符串str的最左面len个字符。
  mysql> select LEFT('foobarbar', 5);
      -> 'fooba'
  该函数是多字节可靠的。 
   
  RIGHT(str,len) 
  返回字符串str的最右面len个字符。 
  mysql> select RIGHT('foobarbar', 4);
      -> 'rbar'
  该函数是多字节可靠的。 
  SUBSTRING(str,pos,len) 
    
  SUBSTRING(str FROM pos FOR len) 
    
  MID(str,pos,len) 
  从字符串str返回一个len个字符的子串,从位置pos开始。使用FROM的变种形式是ANSI SQL92语法。 
  mysql> select SUBSTRING('Quadratically',5,6);
      -> 'ratica'
  该函数是多字节可靠的。 
  SUBSTRING(str,pos) 
    
  SUBSTRING(str FROM pos) 
  从字符串str的起始位置pos返回一个子串。 
  mysql> select SUBSTRING('Quadratically',5);
      -> 'ratically'
  mysql> select SUBSTRING('foobarbar' FROM 4);
      -> 'barbar'
  该函数是多字节可靠的。 
   
  SUBSTRING_INDEX(str,delim,count) 
  返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。
如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。 
  mysql> select SUBSTRING_INDEX('www.mysql.com', '.', 2);
      -> 'www.mysql'
  mysql> select SUBSTRING_INDEX('www.mysql.com', '.', -2);
      -> 'mysql.com'
  该函数对多字节是可靠的。 
   
  LTRIM(str) 
  返回删除了其前置空格字符的字符串str。 
  mysql> select LTRIM(' barbar');
      -> 'barbar'
  RTRIM(str) 
   
  返回删除了其拖后空格字符的字符串str。 
  mysql> select RTRIM('barbar   ');
      -> 'barbar'
  该函数对多字节是可靠的。 
  TRIM([[BOTH | LEA
   
  DING | TRAILING] [remstr] FROM] str) 
  返回字符串str,其所有remstr前缀或后缀被删除了。如果没有修饰符BOTH、LEADING或TRAILING给出,BOTH被假定。如果remstr没被指定,空格被删除。 
  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'
  该函数对多字节是可靠的。 
   
  SOUNDEX(str) 
  返回str的一个同音字符串。听起来“大致相同”的2个字符串应该有相同的同音字符串。
一个“标准”的同音字符串长是4个字符,但是SOUNDEX()函数返回一个任意长的字符串。
你可以在结果上使用SUBSTRING()得到一个“标准”的 同音串。所有非数字字母字符在给定的字符串中被忽略。所有在A-Z之外的字符国际字母被当作元音。 
  mysql> select SOUNDEX('Hello');
      -> 'H400'
  mysql> select SOUNDEX('Quadratically');
      -> 'Q36324'
   
  SPACE(N) 
  返回由N个空格字符组成的一个字符串。 
  mysql> select SPACE(6);
      -> '     '
   
  REPLACE(str,from_str,to_str) 
  返回字符串str,其字符串from_str的所有出现由字符串to_str代替。 
  mysql> select REPLACE('www.mysql.com', 'w', 'Ww');
      -> 'WwWwWw.mysql.com'
  该函数对多字节是可靠的。 
   
  REPEAT(str,count) 
  返回由重复countTimes次的字符串str组成的一个字符串。如果count <= 0,返回一个空字符串。如果str或count是NULL,返回NULL。 
  mysql> select REPEAT('MySQL', 3);
      -> 'MySQLMySQLMySQL'
   
  REVERSE(str) 
  返回颠倒字符顺序的字符串str。 
  mysql> select REVERSE('abc');
      -> 'cba'
  该函数对多字节可靠的。 
   
  INSERT(str,pos,len,newstr) 
  返回字符串str,在位置pos起始的子串且len个字符长得子串由字符串newstr代替。 
  mysql> select INSERT('Quadratic', 3, 4, 'What');
      -> 'QuWhattic'
  该函数对多字节是可靠的。 
   
  ELT(N,str1,str2,str3,...) 
  如果N= 1,返回str1,如果N= 2,返回str2,等等。如果N小于1或大于参数个数,返回NULL。ELT()是FIELD()反运算。 
  mysql> select ELT(1, 'ej', 'Heja', 'hej', 'foo');
      -> 'ej'
  mysql> select ELT(4, 'ej', 'Heja', 'hej', 'foo');
      -> 'foo'
   
  FIELD(str,str1,str2,str3,...) 
  返回str在str1, str2, str3, ...清单的索引。如果str没找到,返回0。FIELD()是ELT()反运算。 
  mysql> select FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
      -> 2
  mysql> select FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
      -> 0
   
  FIND_IN_SET(str,strlist) 
  如果字符串str在由N子串组成的表strlist之中,返回一个1到N的值。一个字符串表是被“,”分隔的子串组成的一个字符串。
如果第一个参数是一个常数字符串并且第二个参数是一种类型为SET的列,FIND_IN_SET()函数被优化而使用位运算!
如果str不是在strlist里面或如果strlist是空字符串,返回0。如果任何一个参数是NULL,返回NULL。如果第一个参数包含一个“,”,该函数将工作不正常。 
  mysql> SELECT FIND_IN_SET('b','a,b,c,d');
      -> 2
   
  MAKE_SET(bits,str1,str2,...) 
  返回一个集合 (包含由“,”字符分隔的子串组成的一个字符串),由相应的位在bits集合中的的字符串组成。
str1对应于位0,str2对应位1,等等。在str1, str2, ...中的NULL串不添加到结果中。 
  mysql> SELECT MAKE_SET(1,'a','b','c');
      -> 'a'
  mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');
      -> 'hello,world'
  mysql> SELECT MAKE_SET(0,'a','b','c');
      -> ''
  EXPORT_SET(bits,on,off,[separator,[number_of_bits]]) 
  返回一个字符串,在这里对于在“bits”中设定每一位,你得到一个“on”字符串,并且对于每个复位(reset)的位,
你得到一个“off”字符串。每个字符串用“separator”分隔(缺省“,”),并且只有“bits”的“number_of_bits” (缺省64)位被使用。 
  mysql> select EXPORT_SET(5,'Y','N',',',4)
      -> Y,N,Y,N 
  LCASE(str) 
    
  LOWER(str) 
  返回字符串str,根据当前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改变成小写。该函数对多字节是可靠的。 
  mysql> select LCASE('QUADRATICALLY');
      -> 'quadratically'
   
  UCASE(str) 
    
  UPPER(str) 
  返回字符串str,根据当前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改变成大写。该函数对多字节是可靠的。 
  mysql> select UCASE('Hej');
      -> 'HEJ'
     
   
   
  MySQL必要时自动变换数字为字符串,并且反过来也如此: 
  mysql> SELECT 1+"1";
      -> 2
  mysql> SELECT CONCAT(2,' test');
      -> '2 test'
  如果你想要明确地变换一个数字到一个字符串,把它作为参数传递到CONCAT()。 
  如果字符串函数提供一个二进制字符串作为参数,结果字符串也是一个二进制字符串。被变换到一个字符串的数字被当作是一个二进制字符串。这仅影响比较
   
      
   
                                       mysql 时间函数用法集合
   
    
   
    这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内: 
   
      mysql> SELECT something FROM table
      WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;  
   
      DAYOFWEEK(date)  
      返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。  
      mysql> select DAYOFWEEK('1998-02-03');  
      -> 3  
   
      WEEKDAY(date)  
      返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。  
      mysql> select WEEKDAY('1997-10-04 22:23:00');  
      -> 5  
      mysql> select WEEKDAY('1997-11-05');  
      -> 2  
   
      DAYOFMONTH(date)  
      返回date的月份中日期,在1到31范围内。  
      mysql> select DAYOFMONTH('1998-02-03');  
      -> 3  
   
      DAYOFYEAR(date)  
      返回date在一年中的日数, 在1到366范围内。  
      mysql> select DAYOFYEAR('1998-02-03');  
      -> 34  
   
      MONTH(date)  
      返回date的月份,范围1到12。  
      mysql> select MONTH('1998-02-03');  
      -> 2  
   
      DAYNAME(date)  
      返回date的星期名字。  
      mysql> select DAYNAME("1998-02-05");  
      -> 'Thursday'
   
      MONTHNAME(date)  
      返回date的月份名字。  
      mysql> select MONTHNAME("1998-02-05");  
      -> 'February'
   
      QUARTER(date)  
      返回date一年中的季度,范围1到4。  
      mysql> select QUARTER('98-04-01');  
      -> 2  
   
      WEEK(date)  
         
      WEEK(date,first)  
      对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式WEEK()允许你指定星期是否开始于星期天或星期一。
如果第二个参数是0,星期从星期天开始,如果第二个参数是1,从星期一开始。  
      mysql> select WEEK('1998-02-20');  
      -> 7  
      mysql> select WEEK('1998-02-20',0);  
      -> 7  
      mysql> select WEEK('1998-02-20',1);  
      -> 8  
   
      YEAR(date)  
      返回date的年份,范围在1000到9999。  
      mysql> select YEAR('98-02-03');  
      -> 1998  
   
      HOUR(time)  
      返回time的小时,范围是0到23。  
      mysql> select HOUR('10:05:03');  
      -> 10  
   
      MINUTE(time)  
      返回time的分钟,范围是0到59。  
      mysql> select MINUTE('98-02-03 10:05:03');  
      -> 5  
   
      SECOND(time)  
      回来time的秒数,范围是0到59。  
      mysql> select SECOND('10:05:03');  
      -> 3  
   
      PERIOD_ADD(P,N)  
      增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。  
      mysql> select PERIOD_ADD(9801,2);  
      -> 199803  
   
      PERIOD_DIFF(P1,P2)  
      返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。  
      mysql> select PERIOD_DIFF(9802,199703);  
      -> 11  
   
      DATE_ADD(date,INTERVAL expr type)  
         
      DATE_SUB(date,INTERVAL expr type)  
         
      ADDDATE(date,INTERVAL expr type)  
         
      SUBDATE(date,INTERVAL expr type)  
      这些功能执行日期运算。对于MySQL 3.22,他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词。 
      在MySQL 3.23中,你可以使用+和-而不是DATE_ADD()和DATE_SUB()。(见例子)date是一个指定开始日期的 
      DATETIME或DATE值,expr是指定加到开始日期或从开始日期减去的间隔值一个表达式,expr是一个字符串;它可以以 
      一个“-”开始表示负间隔。type是一个关键词,指明表达式应该如何被解释。EXTRACT(type FROM date)函数从日期 
      中返回“type”间隔。下表显示了type和expr参数怎样被关联: type值 含义 期望的expr格式  
      SECOND 秒 SECONDS  
      MINUTE 分钟 MINUTES  
      HOUR 时间 HOURS  
      DAY 天 DAYS  
      MONTH 月 MONTHS  
      YEAR 年 YEARS  
      MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"
      HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"
      DAY_HOUR 天和小时 "DAYS HOURS"
      YEAR_MONTH 年和月 "YEARS-MONTHS"
      HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"
      DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"
      DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"
   
      MySQL在expr格式中允许任何标点分隔符。表示显示的是建议的分隔符。
如果date参数是一个DATE值并且你的计算仅仅包含YEAR、MONTH和DAY部分(即,没有时间部分),结果是一个DATE值。否则结果是一个DATETIME值。 
   
      mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;  
      -> 1998-01-01 00:00:00  
      mysql> SELECT INTERVAL 1 DAY + "1997-12-31";  
      -> 1998-01-01  
      mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;  
      -> 1997-12-31 23:59:59  
      mysql> SELECT DATE_ADD("1997-12-31 23:59:59",  
      INTERVAL 1 SECOND);  
      -> 1998-01-01 00:00:00  
      mysql> SELECT DATE_ADD("1997-12-31 23:59:59",  
      INTERVAL 1 DAY);  
      -> 1998-01-01 23:59:59  
      mysql> SELECT DATE_ADD("1997-12-31 23:59:59",  
      INTERVAL "1:1" MINUTE_SECOND);  
      -> 1998-01-01 00:01:00  
      mysql> SELECT DATE_SUB("1998-01-01 00:00:00",  
      INTERVAL "1 1:1:1" DAY_SECOND);  
      -> 1997-12-30 22:58:59  
      mysql> SELECT DATE_ADD("1998-01-01 00:00:00",  
      INTERVAL "-1 10" DAY_HOUR);  
      -> 1997-12-30 14:00:00  
      mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);  
      -> 1997-12-02  
      mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");  
      -> 1999  
      mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");  
      -> 199907  
      mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");  
      -> 20102  
   
      如果你指定太短的间隔值(不包括type关键词期望的间隔部分),MySQL假设你省掉了间隔值的最左面部分。
例如,如果你指定一个type是DAY_SECOND,值expr被希望有天、小时、分钟和秒部分。
如果你象"1:10"这样指定值,MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说,"1:10" DAY_SECOND以它等价于"1:10" MINUTE_SECOND的方式解释,
这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期,结果是NULL。
如果你增加MONTH、YEAR_MONTH或YEAR并且结果日期大于新月份的最大值天数,日子在新月用最大的天调整。 
   
      mysql> select DATE_ADD('1998-01-30', Interval 1 month);  
      -> 1998-02-28  
   
      注意,从前面的例子中词INTERVAL和type关键词不是区分大小写的。  
      
      TO_DAYS(date)  
      给出一个日期date,返回一个天数(从0年的天数)。  
      mysql> select TO_DAYS(950501);  
      -> 728779  
      mysql> select TO_DAYS('1997-10-07');  
      -> 729669  
   
      TO_DAYS()
      不打算用于使用格列高里历(1582)出现前的值。 
   
      FROM_DAYS(N)  
      给出一个天数N,返回一个DATE值。  
      mysql> select FROM_DAYS(729669);  
      -> '1997-10-07'
   
      DATE_FORMAT(date,format)  
      根据format字符串格式化date值。下列修饰符可以被用在format字符串中: %M 月名字(January……December)  
      %W 星期名字(Sunday……Saturday)  
      %D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)  
      %Y 年, 数字, 4 位  
      %y 年, 数字, 2 位  
      %a 缩写的星期名字(Sun……Sat)  
      %d 月份中的天数, 数字(00……31)  
      %e 月份中的天数, 数字(0……31)  
      %m 月, 数字(01……12)  
      %c 月, 数字(1……12)  
      %b 缩写的月份名字(Jan……Dec)  
      %j 一年中的天数(001……366)  
      %H 小时(00……23)  
      %k 小时(0……23)  
      %h 小时(01……12)  
      %I 小时(01……12)  
      %l 小时(1……12)  
      %i 分钟, 数字(00……59)  
      %r 时间,12 小时(hh:mm:ss [AP]M)  
      %T 时间,24 小时(hh:mm:ss)  
      %S 秒(00……59)  
      %s 秒(00……59)  
      %p AM或PM  
      %w 一个星期中的天数(0=Sunday ……6=Saturday )  
      %U 星期(0……52), 这里星期天是星期的第一天  
      %u 星期(0……52), 这里星期一是星期的第一天  
      %% 一个文字“%”。 
   
      所有的其他字符不做解释被复制到结果中。 
   
      mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');  
      -> 'Saturday October 1997'
      mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');  
      -> '22:23:00'
      mysql> select DATE_FORMAT('1997-10-04 22:23:00',  
      '%D %y %a %d %m %b %j');  
      -> '4th 97 Sat 04 10 Oct 277'
      mysql> select DATE_FORMAT('1997-10-04 22:23:00',  
      '%H %k %I %r %T %S %w');  
      -> '22 22 10 10:23:00 PM 22:23:00 00 6'
      MySQL3.23中,在格式修饰符字符前需要%。在MySQL更早的版本中,%是可选的。 
   
      TIME_FORMAT(time,format)  
      这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。其他修饰符产生一个NULL值或0。  
      
      CURDATE()  
         
      CURRENT_DATE
      以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。  
      mysql> select CURDATE();  
      -> '1997-12-15'
      mysql> select CURDATE() + 0;  
      -> 19971215  
   
      CURTIME()  
         
      CURRENT_TIME
      以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。  
      mysql> select CURTIME();  
      -> '23:50:26'
      mysql> select CURTIME() + 0;  
      -> 235026  
   
      NOW()  
         
      SYSDATE()  
         
      CURRENT_TIMESTAMP
      以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的上下文被使用。  
      mysql> select NOW();  
      -> '1997-12-15 23:50:26'
      mysql> select NOW() + 0;  
      -> 19971215235026  
   
      UNIX_TIMESTAMP()  
         
      UNIX_TIMESTAMP(date)  
      如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。
如果UNIX_TIMESTAMP()用一个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。
date可以是一个DATE字符串、一个DATETIME字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。  
      mysql> select UNIX_TIMESTAMP();  
      -> 882226357  
      mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');  
      -> 875996580  
      当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换。 
   
      FROM_UNIXTIME(unix_timestamp)  
      以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串还是或数字上下文中被使用。  
      mysql> select FROM_UNIXTIME(875996580);  
      -> '1997-10-04 22:23:00'
      mysql> select FROM_UNIXTIME(875996580) + 0;  
      -> 19971004222300  
   
      FROM_UNIXTIME(unix_timestamp,format)  
      返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条目同样的修饰符。  
      mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),  
      '%Y %D %M %h:%i:%s %x');  
      -> '1997 23rd December 03:43:30 x'
   
      SEC_TO_TIME(seconds)  
      返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字上下文中被使用。  
      mysql> select SEC_TO_TIME(2378);  
      -> '00:39:38'
      mysql> select SEC_TO_TIME(2378) + 0;  
      -> 3938  
   
      TIME_TO_SEC(time)  
      返回time参数,转换成秒。  
      mysql> select TIME_TO_SEC('22:23:00');  
      -> 80580  
      mysql> select TIME_TO_SEC('00:39:38');  
      -> 2378 
   
      Mysql取系统函数:
   
      Select curtime();
   
      Select curdate():
   
      Select sysdate():
      select now();
   
    
   
    
   
   
  7. 分组函数
    avg() 求平均值
      //返回所有员工的工资
      SELECT avg(salary) FROM emp;
       
    count() 求返回的记录行数
      //返回所有员工的记录行数
       SELECT count(*) FROM emp;
       SELECT count(1) FROM emp;
       SELECT count(id) FROM emp;
   
    max() 计算最大值
      //返回所有员工工资的最大数
      SELECT max(salary) FROM emp;
   
    min() 计算最小值
      //返回所有员工工资的最小数
      SELECT min(salary) FROM emp;
       
    sum() 求和
      //返回所有员工工资的总和
      SELECT sum(salary) FROM emp;
       
    DISTINCT() 去掉重复,不重复的记录数
    返回员工的部门编号, 去掉重复的编号
    SELECT DISTINCT(dept_id) FROM emp;
   
    返回员工,不重复的部门数量
    SELECT count(DISTINCT(dept_id)) FROM emp;
   
  8. 分组函数的空值 NULL
    除了 count(1),count(*) 外所有其他分组函数忽略空值
    向 emp 插入一条 salary 为NULL 的记录
    INSERT INTO emp(id,name)VALUES(9,'晓巍');
       
    查询出emp 所有工资不为空的员工的总工资, 平均工资  
       
    SELECT sum(salary),count(*),avg(salary) FROM emp;
    SELECT sum(salary),count(1),avg(salary) FROM emp;
    SELECT sum(salary),count(id),avg(salary) FROM emp;
       
    SELECT sum(salary),count(salary),avg(salary) FROM emp;
   
    实际应用中如果要将空值纳入到分组统计计算 可以使用 nvl 函数转换
    SELECT sum(nvl(salary,0)),count(nvl(salary,0)),avg(nvl(salary,0)) FROM emp;
   
  9. 分组函数中的重复值
    DISTINCT  过滤掉重复值
    ALL   不过滤掉重复值
   
    SELECT sum(salary),count(salary),avg(salary) FROM emp;
    SELECT sum(ALL(salary)),count(ALL(salary)),avg(ALL(salary)) FROM emp;
    SELECT sum(DISTINCT(salary)),count(DISTINCT(salary)),avg(DISTINCT(salary)) FROM emp;
   
   
  10. GROUP BY 子句
    SELECT 字段名 | 表达式,分组函数 ...
    FROM 表名
    [WHERE 查询条件]
    [GROUP BY 分组字段列表]
    [ORDER BY 排序字段列表]
   
    WHERE 子句最先执行, 然后 GROUP BY 子句分组 , ORDER BY 子句对分组的结果排序最后执行
   
    1. 基于单字段分组
      计算每个部门的平均工资
      SELECT dept_id,avg(salary) FROM emp GROUP BY dept_id;
         
      计算每个部门的平均工资, 按部门编号倒序排列
      SELECT dept_id,avg(salary)  FROM emp GROUP BY dept_id ORDER BY dept_id  DESC;
   
      计算每个部门的平均工资, 按平均工资倒序排列
      SELECT dept_id,avg(salary) FROM emp GROUP BY dept_id ORDER BY avg(salary) DESC;
         
      分组中用别名
      SELECT dept_id,avg(salary) avg_salary FROM emp GROUP BY dept_id ORDER BY avg_salary DESC;
   
      注意: 使用分组函数时, 出现在 SELECT 列表中的字段如果不包含在组函数中, 那么该字段必须同时在 GROUP BY 字句中出现, 
      反之包含在 GROUP BY 子句中的字段则不必须出现在 SELECT 列表中.
     
      //错误
      SELECT dept_id,name,avg(salary)  FROM emp GROUP BY dept_id;
   
      //正确
      SELECT avg(salary)  FROM emp GROUP BY dept_id;
   
      // 分组时可以用WHERE 语句 
      SELECT dept_id,avg(salary)  FROM emp WHERE salary>5000 GROUP BY dept_id;
   
      但WHERE条件不允许用分组函数    
      //错误   原因是WHERE 语句先执行 数据还没有分组
      SELECT dept_id,avg(salary)  FROM emp WHERE avg(salary)>5000 GROUP BY dept_id;
   
      //解决办法: 分组条件判断 HAVING 子句
      SELECT dept_id,avg(salary)  FROM emp GROUP BY dept_id HAVING avg(salary)>5000;
   
      WHERE 和 GROUP BY 先判断再分组 并且WHERE 不能用分组函数
      GROUP BY 和 Having 先分组再 判断 Having 可以用分组函数
   
   
    2. 两个表关联分组
      计算每个部门的平均工资,显示出部门名称
      SELECT a.name,avg(b.salary)  FROM dept a,emp b WHERE a.id=b.dept_id GROUP BY a.name;

http://www.verejava.com/?id=1717412762063

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Delphi中有多种数据类型,包括整数,字符串,布尔值,浮点数等。它也具有函数语法结构,它以函数返回值的形式返回一些值。例如:函数Abs()可返回一个整数的绝对值;函数StrToInt()可以将字符串转换为整数类型,并返回该整数值。 ### 回答2: Delphi中有多种数据类型,包括整数类型(Integer、Byte等)、浮点数类型(Single、Double等)、布尔类型(Boolean)、字符类型(Char)、字符串类型(String)以及自定义的记录类型(Record)和数组类型(Array)等等。不同的数据类型在存储空间和取值范围上有所不同,我们可以根据具体的需求选择合适的数据类型。 在Delphi中,函数是一组完成特定任务的代码块。函数语法结构通常包含函数名、输入参数和返回值。函数通过它的输入参数来接受外部传递给它的数据,然后进行一定的计算或处理,并通过return语句将结果返回给调用者。函数的返回值可以是任意的数据类型,包括上述提到的各种数据类型。 以下是一个简单的例子,说明如何在Delphi中定义函数并返回结果: function AddTwoNumbers(a, b: Integer): Integer; // 定义了一个名为AddTwoNumbers的函数,接受两个整数类型的参数,返回一个整数类型的结果 begin Result := a + b; // 将a和b相加的结果赋值给函数的返回值Result end; procedure TForm1.Button1Click(Sender: TObject); var num1, num2, sum: Integer; // 声明三个整数类型的变量 begin num1 := 10; num2 := 20; sum := AddTwoNumbers(num1, num2); // 调用AddTwoNumbers函数,并将返回值赋值给sum变量 ShowMessage('两个数的和为:' + IntToStr(sum)); // 在消息框中显示结果 end; 在上述例子中,我们定义了AddTwoNumbers函数,它接受两个整数参数a和b,并返回它们之和。在Button1的点击事件中,我们声明了两个整数变量num1和num2,并将其赋值为10和20。然后,通过调用AddTwoNumbers函数并传递num1和num2作为参数,将返回的结果赋值给sum变量。最后,通过ShowMessage函数将sum的值在消息框中显示出来。 这只是Delphi中数据类型函数语法结构的一个简单示例。在实际应用中,我们可以根据需求定义不同的数据类型函数,并根据具体逻辑返回不同类型的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值