精华内容
下载资源
问答
  • Oracle函数——日期函数

    万次阅读 多人点赞 2018-05-14 16:48:47
    日期时间函数用于处理时间类型的数据,Oracle以7位数字格式来存放日期数据,包括世纪、年、月、日、小时、分钟、秒,并且默认日期显式格式为“DD-MON-YY”。在Oracle中准确来说一个礼拜是从星期日开始到星期六结束的...

            Oracle中的时间类型只有date和TIMESTAMP,TIMESTAMP是比date更精确的类型。日期时间函数用于处理时间类型的数据,Oracle以7位数字格式来存放日期数据,包括世纪、年、月、日、小时、分钟、秒,并且默认日期显式格式为“DD-MON-YY”。在Oracle中准确来说一个礼拜是从星期日开始到星期六结束的,其中时间差以天数为单位。

    SYSDATE:取得当前的日期和时间,类型是DATE.它没有参数.但在分布式SQL语句中使用时,SYSDATE返回本地数据库的日期和时间.

    SYSTIMESTAMP:9i新增函数,返回当前系统的日期时间及时区。

    多种日期格式:

    YYYY:四位表示的年份 
    YYY,YY,Y:年份的最后三位、两位或一位,缺省为当前世纪 
    IYYY:ISO标准的四位年份
    MM:01~12的月份编号 
    MON:缩写字符集表示 
    MONTH:全拼字符集表示的月份,右边用空格填补
    Q:季度
    W:当月第几周
    WW:当年第几周 
    IW:ISO标准的年中的第几周
    D:当周第几天 
    DD:当月第几天 
    DDD:当年第几天 
    DY:缩写字符集表示
    DAY:全拼字符集表示的天 如(星期六)
    HH,HH12:一天中的第几个小时,12进制表示法 
    HH24:一天中的第几个小时,取值为00~23 
    MI:一小时中的分钟 
    SS:一分钟中的秒 

    SSSS:从午夜开始过去的秒数 

    select to_char(sysdate, 'yyyy') 年,
           to_char(sysdate, 'mm') 月,
           to_char(sysdate, 'DD') 日,
           to_char(sysdate, 'HH24') 时,
           to_char(sysdate, 'MI') 分,
           to_char(sysdate, 'SS') 秒,
           to_char(sysdate, 'DAY') 天,
           to_char(sysdate, 'Q') 第几季度,
           to_char(sysdate, 'W') 当月第几周,
           to_char(sysdate, 'WW') 当年第几周,
           to_char(sysdate, 'D') 当周第几天,
           to_char(sysdate, 'DDD') 当年第几天    
      from dual;
    结果:


    1、与date操作关系最大的就是两个转换函数:to_date(char[fmt[,'nls_param’]]),to_char(date[,fmt,[,nls_param]]) 

    1.1、to_date(char[fmt[,'nls_param’]]):将字符类型按一定格式转化为日期类型
    具体用法:to_date('2004-11-27','yyyy-mm-dd'),前者为字符串,后者为转换日期格式,注意,前后两者要一一对应。
    当时间为null时的用法:select to_date(null) from dual;
    结果:

    1.2、to_char(date[,fmt,[,nls_param]]):将日期转按一定格式换成字符类型 ,fmt,nls_param为可选项,fmt指定了要转化的格式,nls_param指定了返回日期所使用的语言

    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') time from dual; 
    结果:

    1.3、求某天是星期几:

    select to_char(to_date('2018-05-11','yyyy-mm-dd'),'DAY') from dual;
    结果:
    select to_char(to_date('2018-05-11','yyyy-mm-dd'),'DAY','NLS_DATE_LANGUAGE=American') from dual;

    结果:

    1.4、设置日期语言:也就是设置nls_session_parameters视图的值
    查看参数值:select * from nls_session_parameters where parameter = 'NLS_DATE_LANGUAGE';
       修改时间以什么区域方式显示,比如是要显示MONDAY还是要显示星期一:alter session set NLS_DATE_LANGUAGE='American';

           日期格式: alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';

    2、显示数字的英文读法:这个是oracle的特殊用法,也不常用。

    select to_char(to_date(222,'J'),'Jsp') from dual;

    结果:Two Hundred Twenty-Two

    3、TO_TIMESTAMP(char[fmt[,'nls_param’]])函数:应注意char、fmt、nls_param之间的对应关系。
    3.1、select to_timestamp('01-5月-18 07.46.41.000000000 上午','dd-MON-yy hh:mi:ss.ff AM') from dual;
    结果:
    3.2、date型转成timestamp:
    select cast(sysdate as timestamp) date_to_timestamp from dual;
    4、TO_TIMESTAMP_TZ(char[fmt[,’nls_param’]])函数:将符合特定日期和时间格式的字符串转变为TIMESTAMP WITH TIME ZONE类型。
    Select TO_TIMESTAMP_TZ('2018-05-14','yyyy-mm-dd') from dual;
    结果:

    5、current_date、current_timestamp、localtimestamp、sessiontimezone、dbtimezone函数
    current_date:9i新增函数,返回当前会话时区所对应的日期时间(date型)
    current_timestamp:以 timestamp with time zone 数据类型返回当前会话时区所对应的日期时间。
    localtimestamp:返回当前会话时区的日期时间
    sessiontimezone:返回会话时区(字符型)

    dbtimezone:返回数据库所在时区

    SELECT current_date,current_timestamp,localtimestamp,sessiontimezone,dbtimezone from dual;

    结果:

    ZOON时区:

    GMT:格林威治时间(老的时间计量标准)
    UTC:协调世界时间(我们现在用的时间标准),比GTM更加标准,UTC=GMT
    CST:中央标准时间 CDT:中部夏令时
    PST:太平洋时间   PDT:太平洋夏令时
    EST: 东部标准时间  EDT:东部夏令时间     EST=UTC-5;

    6、FROM_TZ(timaezone_stamp,timezone_value)函数:将时区值和TIMESTAMP(时间戳)转换为TIMESTAMP WITH TIME ZONE值。
    Select from_tz(timestamp '2018-05-14 12:00:00','8:00')from dual;

    结果:

    7、TZ_OFFSET(time_zone_name||sessiontimezone||dbtimezone):返回特定时区与UTC相比的时区偏移。
    Select TZ_OFFSET ('EST') from dual;
    结果:
    8、SYS_EXTRACT_UTC(timestamp)函数:将一个timestamptz转换成UTC时区的本地时间
    Select SYS_EXTRACT_UTC(timestamp'2018-05-14 12:00:00 +08:00') from dual;
    结果:
    9、NEW_TIME(date,timezone1,timezone2):计算当时区timezone1中的日期和时间是date时候,返回时区timezone2中的日期和时间
    select NEW_TIME(to_date('2018-05-14 12:00:00','yyyy-mm-dd hh24:mi:ss'),'GMT','EST'),to_date('2018-05-14 12:00:00','yyyy-mm-dd hh24:mi:ss') from dual;
    结果:
    10、ADD_MONTHS(d,n)函数:在某一个日期d上,加上指定的月数n,n可以是任意整数。返回计算后的新日期
    select SYSDATE,add_months(SYSDATE,-2),add_months(sysdate,2) from dual;
    结果:

    11、floor函数:计算两个日期间的天数
    select floor(to_date('2018-05-03 20:00:00','yyyy-mm-dd hh24:mi:ss')-to_date('2018-05-01 12:00:00','yyyy-mm-dd hh24:mi:ss')) A from dual;
    结果:

    12、NumtoDSinterval(n,char_expr)函数:将数字n转换为INTERNAL DAY TO SECOND(内部时间)格式;char_expr是一个字符串,可以是DAY\HOUR\MINUTE或SECOND。【DS表示 DAY——>SECOND】
    select sysdate,sysdate+numtoDSinterval(3,'hour') from dual;
    结果:

    13、TO_DSINTERVAL函数:可以对日期随意加减,如下例:对原来的时间加一天。参数格式为 天数 时,分,秒

    select sysdate,TO_DSINTERVAL('01 00:00:00')+sysdate from dual;

    结果:

    14、NUMTOYMINTERVAL(n,char_expr)函数:将数字n转换为INTERVAL YEAR TO MONTH格式,char_expr可以是year或者month。【YM表示 YEAR——>MONTH】

    select sysdate,sysdate+numtoyminterval(3,'year') from dual;

    结果:

    15、TO_YMINTERVAL(char)函数:参数要求格式必须是'xx-xx'.例如'02-08'  就表示某两个时间差了 2年零 8个月.

     select sysdate,sysdate + to_yminterval('02-08') from dual; 

    结果:

    16、Last_day(d)函数:返回包含了日期参数的月份的最后一天的日期。是处理月份天数不定的办法,可以用来计算当月中剩余天数。
    select to_char(add_months(last_day(sysdate)+1,-1),'yyyy-mm-dd'),last_day(sysdate) from dual;

    结果:

    17、months_between(date1,date2)函数:计算date1和date2之间相差的月数.如果date1<date2,则返回负数;如果date1,date2这两个日期中日分量信息是相同的,或者这两个日期都分别是所在月的最后一天,那么返回的结果是一个整数,否则包括一个小数,小数为富余天数除以31,Oracle以每月31天为准计算结果。
    select months_between(to_date('2018-02-11','yyyy-mm-dd'),to_date('2018-05-11','yyyy-mm-dd'))"month" from dual;
    结果:-3

    18、NEXT_DAY(d,string)函数:准确来说一个礼拜是从星期日开始到星期六结束的。例如next_day(sysdate,6)是从当前开始下一个星期五。很多的查询条件和统计都需要求得一周的时间段,也就是星期一到星期日的时间段。给出日期d和星期string之后计算下一个星期的日期. String是星期几;当前会话的语言指定了一周中的某一天.返回值的时间分量与d的时间分量是相同的. String的内容可以忽略大小写.
    select sysdate,next_day(sysdate,'星期五') next_day from dual;
    结果:

    19、EXTRACT(fmt FROM d)函数:提取日期中的特定部分。fmt 为:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。其中 YEAR、MONTH、DAY可以为 DATE 类型匹配,也可以与 TIMESTAMP 类型匹配;但是 HOUR、MINUTE、SECOND 必须与 TIMESTAMP 类型匹配。HOUR 匹配的结果中没有加上时区,因此在中国运行的结果小 8 小时。
    SELECT SYSDATE ,
           
           EXTRACT(YEAR FROM SYSDATE) "year",
           
           EXTRACT(MONTH FROM SYSDATE) "month",
           
           EXTRACT(DAY FROM SYSDATE) "day",
           
           EXTRACT(HOUR FROM SYSTIMESTAMP) "hour",
           
           EXTRACT(MINUTE FROM SYSTIMESTAMP) "minute",
           
           EXTRACT(SECOND FROM SYSTIMESTAMP) "second"
    
      FROM dual;
    结果:

    20、ROUND(d[,fmt])函数:将日期d按照由fmt指定的格式进行四舍五入处理.如果没有给fmt则使用缺省设置'DD'.

      ① 如果 fmt 为“YEAR”则舍入到某年的 1 月 1 日,即前半年舍去,后半年作为下一年。
      ② 如果 fmt 为“MONTH”则舍入到某月的 1 日,即前月舍去,后半月作为下一月。
      ③ 默认为“DD”,即月中的某一天,最靠近的天,前半天舍去,后半天作为第二天。

      ④ 如果 fmt 为“DAY”则舍入到最近的周的周日,即上半周舍去,下半周作为下一周周日。

    SELECT SYSDATE,ROUND(SYSDATE),ROUND(SYSDATE,'day'),ROUND(SYSDATE,'month'),ROUND(SYSDATE,'year') FROM dual;

    结果:

    21、TRUNC(d[,format]):截断日期时间数据,计算截尾到由format指定单位的日期d.缺省参数同ROUNG(d[,fmt]).
    select sysdate,trunc(sysdate),trunc(sysdate,'year') YEAR,to_char(trunc(sysdate,'hh'),'hh24')Hours  from dual;

    结果:

    select Days,
           A,
           trunc(A * 24) Hours,
           trunc(A * 24 * 60 - 60 * TRUNC(A * 24)) Minutes,
           trunc(A * 24 * 60 * 60 - 60 * TRUNC(A * 24 * 60)) Seconds,
           trunc(A * 24 * 60 * 60 * 100 - 100 * TRUNC(A * 24 * 60 * 60)) mSeconds
      from (select trunc(sysdate) Days, sysdate - trunc(sysdate) A from dual)

    结果:

    22、组合用法:
    22.1、根据某一天具体日期,查找该日为星期几,并得到星期一和星期日具体日期

    方式一:使用TO_CHAR(SYSDATE,'D')可以求得当前日期是一周的第几天,得到的结果是星期日开始作为第1天的,那么星期一就是第2天,星期日就是第8天。

    select to_char(sysdate, 'yyyy-mm-dd') 今天,
           decode(to_char(sysdate, 'D'),
                  '1',
                  '星期日',
                  '2',
                  '星期一',
                  '3',
                  '星期二',
                  '4',
                  '星期三',
                  '5',
                  '星期四',
                  '6',
                  '星期五',
                  '7',
                  '星期六') 星期几,
           to_char(sysdate - to_number(to_char(sysdate, 'D')) + 2, 'yyyy-mm-dd') 星期一,
           to_char(sysdate - to_number(to_char(sysdate, 'D')) + 8, 'yyyy-mm-dd') 星期日
      from dual;

    方式二:SUBSTR代替DECODE函数,NEXT_DAY函数可以指定当前日期的下一个星期几的日期,比如:今天是2018-5-14日,星期五,那么Next_Day(sysdate,'星期一'),得到的日期就是5-21,那么这个星期一的日期就是5-21减去7天,而星期日的日期就是5-21减去1天.

    select to_char(sysdate, 'yyyy-mm-dd') 今天,'星期'||substr('日一二三四五六',to_number(to_char(sysdate,'d')),1) 星期几,
           to_char(next_day(sysdate,'星期一')-7,'yyyy-mm-dd') 星期一,
           to_char(next_day(sysdate,'星期一')-1,'yyyy-mm-dd') 星期日
      from dual;

    结果:


    22.2、查找2018-05-14至2018-05-01间除星期一和七的天数

    select count(*)
      from (select rownum - 1 rnum
              from all_objects
             where rownum <= to_date('2018-05-14', 'yyyy-mm-dd') -
                   to_date('2018-05-01', 'yyyy-mm-dd') + 1)
     where to_char(to_date('2018-05-01', 'yyyy-mm-dd') + rnum - 1, 'D') not in
           ('1', '7')

    结果:


    22.3、找出今年的天数:

    select add_months(trunc(sysdate,'year'),12)-trunc(sysdate,'year') from dual;

    结果:365

    闰年的处理方法:     
    select to_char(last_day(to_date('2018'||'02','yyyymm')),'dd') from dual;    

    如果是28就不是闰年 


    22.4、五秒钟一个间隔:

    select to_char(sysdate, 'SSSSS') / 300,
           floor(to_char(sysdate, 'SSSSS') / 300),
           floor(to_char(sysdate, 'SSSSS') / 300) * 300,
           to_date(floor(to_char(sysdate, 'SSSSS') / 300) * 300, 'SSSSS')隔五秒一个间隔
      from dual;

    结果:


    22.5、查找月的第一天,最后一天

    SELECT sysdate,
           Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,
           Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,
           (Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month
      FROM dual;

    结果:


    22.6、查询某周的第一天,例如2018年第二周。

    方法一:

    select trunc(decode(ww,
                        53,
                        to_date(yy || '1231', 'yyyymmdd'),
                        to_date(yy || '-' || to_char(ww * 7), 'yyyy-ddd')),
                 'd') - 6 first_day
      from (select substr('2018-2', 1, 4) yy, to_number(substr('2018-2', 6)) ww
              from dual);
    方法二:
    select trunc(to_date(substr('2018-2',1,5)||to_char((to_number(substr('2018-2',6)))*7),'yyyy-ddd'),'d')-6 first_day from dual;
    方法三:
    select min(v_date) first_day
      from (select (to_date('201801', 'yyyymm') + rownum-1) v_date
              from all_tables
             where rownum < 370)
     where to_char(v_date, 'yyyy-iw') = '2018-02';

    结果:


    22.7、查询某周的最后一天

    方法一:

    select trunc(decode(ww,
                        53,
                        to_date(yy || '1231', 'yyyymmdd'),
                        to_date(yy || '-' || to_char(ww * 7), 'yyyy-ddd')),
                 'd') last_day
      from (select substr('2018-02', 1, 4) yy, to_number(substr('2018-02', 6)) ww
              from dual);

    方法二:

    select trunc(to_date(substr('2018-02',1,5)||to_char((to_number(substr('2018-02',6)))*7),'yyyy-ddd'),'d') last_day from dual
    方法三:
    select max(v_date) last_day
      from (select (to_date('201801', 'yyyymm') + rownum-1) v_date
              from all_tables
             where rownum < 370)
     where to_char(v_date, 'yyyy-iw') = '2018-02';


    22.8、查询某周的日期

    一、

    select v_date,to_char( v_date, 'day') day
      from (select (to_date('201801', 'yyyymm') + rownum - 1) v_date
              from all_tables
             where rownum < 370)
     where to_char(v_date, 'yyyy-ww') = '2018-01';
    二、
    select min_date, to_char(min_date, 'day') day
      from (select to_date(substr('2018-01', 1, 4) || '001' + rownum - 1,
                           'yyyyddd') min_date
              from all_tables
             where rownum <= decode(mod(to_number(substr('2018-01', 1, 4)), 4),
                                    0,
                                    366,
                                    365)
            union
            select to_date(substr('2018-01', 1, 4) - 1 ||
                           decode(mod(to_number(substr('2018-01', 1, 4)) - 1, 4),
                                  0,
                                  359,
                                  358) + rownum,
                           'yyyyddd') min_date
              from all_tables
             where rownum <= 7
            union
            select to_date(substr('2018-01', 1, 4) + 1 || '001' + rownum - 1,
                           'yyyyddd') min_date
              from all_tables
             where rownum <= 7)
     where to_char(min_date, 'yyyy-ww') = '2018-01';
    
    结果:
    展开全文
  • 下面的例子使用了时间函数。以下询问选择了最近的 30天内所有带有date_col 值的记录:  mysql> SELECT something FROM tbl_name ... 用于日期值的函数通常会接受时间日期值而忽略时间部分。而用于时间值的函数通常
    下面的例子使用了时间函数。以下询问选择了最近的 30天内所有带有date_col 值的记录: 
    

      mysql> SELECT something FROM tbl_name

      -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;

      注意,这个询问也能选择将来的日期记录。

      用于日期值的函数通常会接受时间日期值而忽略时间部分。而用于时间值的函数通常接受时间日期值而忽略日期部分。

      返回各自当前日期或时间的函数在每次询问执行开始时计算一次。这意味着在一个单一询问中,对诸如NOW() 的函数多次访问总是会得到同样的结果(未达到我们的目的,单一询问也包括对存储程序或触发器和被该程序/触发器调用的所有子程序的调用 )。这项原则也适用于 CURDATE()、 CURTIME()、 UTC_DATE()、 UTC_TIME()、UTC_TIMESTAMP(),以及所有和它们意义相同的函数。

      CURRENT_TIMESTAMP()、 CURRENT_TIME()、 CURRENT_DATE()以及FROM_UNIXTIME()函数返回连接当前时区内的值,这个值可用作time_zone系统变量的值。此外, UNIX_TIMESTAMP() 假设其参数为一个当前时区的时间日期值。

      以下函数的论述中返回值的范围会请求完全日期。 若一个日期为“零” 值,或者是一个诸如''2001-11-00''之类的不完全日期, 提取部分日期值的函数可能会返回 0。 例如, DAYOFMONTH(''2001-11-00'') 会返回0。

      ADDDATE(date,INTERVAL expr type) ADDDATE(expr,days)

      当被第二个参数的INTERVAL格式激活后, ADDDATE()就是DATE_ADD()的同义词。相关函数SUBDATE() 则是DATE_SUB()的同义词。对于INTERVAL参数上的信息 ,请参见关于DATE_ADD()的论述。

      mysql> SELECT DATE_ADD(''1998-01-02'', INTERVAL 31 DAY);-> ''1998-02-02''mysql> SELECT ADDDATE(''1998-01-02'', INTERVAL 31 DAY);-> ''1998-02-02''

      若 days 参数只是整数值,则 MySQL 5.1将其作为天数值添加至 expr。

      mysql> SELECT ADDDATE(''1998-01-02'', 31);-> ''1998-02-02''

      ◆ ADDTIME(expr,expr2)

      ADDTIME()将 expr2添加至expr 然后返回结果。 expr 是一个时间或时间日期表达式,而expr2 是一个时间表达式。

      mysql> SELECT ADDTIME(''1997-12-31 23:59:59.999999'',-> ''1 1:1:1.000002'');-> ''1998-01-02 01:01:01.000001''mysql> SELECT ADDTIME(''01:00:00.999999'', ''02:00:00.999998'');-> ''03:00:01.999997''

      ◆ CONVERT_TZ(dt,from_tz,to_tz)

      CONVERT_TZ() 将时间日期值dt 从from_tz 给出的时区转到to_tz给出的时区,然后返回结果值。

      在从若from_tz 到UTC的转化过程中,该值超出 TIMESTAMP 类型的被支持范围,那么转化不会发生。

      mysql> SELECT CONVERT_TZ(''2004-01-01 12:00:00'',''GMT'',''MET'');-> ''2004-01-01 13:00:00''mysql> SELECT CONVERT_TZ(''2004-01-01 12:00:00'',''+00:00'',''+10:00'');-> ''2004-01-01 22:00:00''

      注释:若要使用诸如 ''MET''或 ''Europe/Moscow''之类的指定时间区,首先要设置正确的时区表。

      ◆ CURDATE()

      将当前日期按照''YYYY-MM-DD'' 或YYYYMMDD 格式的值返回,具体格式根据函数用在字符串或是数字语境中而定。

      mysql> SELECT CURDATE();-> ''1997-12-15''mysql> SELECT CURDATE() + 0;-> 19971215

      ◆ CURRENT_DATE CURRENT_DATE()

      CURRENT_DATE和CURRENT_DATE()是的同义词.

      ◆ CURTIME()

      将当前时间以''HH:MM:SS''或 HHMMSS 的格式返回, 具体格式根据函数用在字符串或是数字语境中而定。

      mysql> SELECT CURTIME();-> ''23:50:26''mysql> SELECT CURTIME() + 0;-> 235026

      ◆ CURRENT_TIME, CURRENT_TIME()

      CURRENT_TIME 和CURRENT_TIME() 是CURTIME()的同义词。

      ◆ CURRENT_TIMESTAMP, CURRENT_TIMESTAMP()

      CURRENT_TIMESTAMP和 CURRENT_TIMESTAMP()是NOW()的同义词。

      ◆ DATE(expr)

      提取日期或时间日期表达式expr中的日期部分。

      mysql> SELECT DATE(''2003-12-31 01:02:03'');-> ''2003-12-31''

      ◆ DATEDIFF(expr,expr2)

      DATEDIFF() 返回起始时间 expr和结束时间expr2之间的天数。Expr和expr2 为日期或 date-and-time 表达式。计算中只用到这些值的日期部分。

      mysql> SELECT DATEDIFF(''1997-12-31 23:59:59'',''1997-12-30'');-> 1mysql> SELECT DATEDIFF(''1997-11-30 23:59:59'',''1997-12-31'');-> -31

      ◆ DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type)

      这些函数执行日期运算。 date 是一个 DATETIME 或DATE值,用来指定起始时间。 expr 是一个表达式,用来指定从起始日期添加或减去的时间间隔值。 Expr是一个字符串;对于负值的时间间隔,它可以以一个 ‘-’开头。 type 为关键词,它指示了表达式被解释的方式。

      关键词INTERVA及 type 分类符均不区分大小写。

      以下表显示了type 和expr 参数的关系:

      

      MySQL 允许任何expr 格式中的标点分隔符。表中所显示的是建议的 分隔符。若 date 参数是一个 DATE 值,而你的计算只会包括 YEAR、MONTH和DAY部分(即, 没有时间部分), 其结果是一个DATE 值。否则,结果将是一个 DATETIME值。

      若位于另一端的表达式是一个日期或日期时间值 , 则INTERVAL expr type只允许在 + 操作符的两端。对于 C操作符, INTERVAL expr type 只允许在其右端,原因是从一个时间间隔中提取一个日期或日期时间值是毫无意义的。 (见下面的例子)。

      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 DATE_ADD(''1992-12-31 23:59:59.000002'',-> INTERVAL ''1.999999'' SECOND_MICROSECOND);-> ''1993-01-01 00:00:01.000001''

      若你指定了一个过于短的时间间隔值 (不包括type 关键词所预期的所有时间间隔部分), MySQL 假定你已经省去了时间间隔值的最左部分。 例如,你指定了一种类型的DAY_SECOND, expr 的值预期应当具有天、 小时、分钟和秒部分。若你指定了一个类似 ''1:10''的值, MySQL 假定天和小时部分不存在,那么这个值代表分和秒。换言之, ''1:10'' DAY_SECOND 被解释为相当于 ''1:10'' MINUTE_SECOND。这相当于 MySQL将TIME 值解释为所耗费的时间而不是日时的解释方式。

      假如你对一个日期值添加或减去一些含有时间部分的内容,则结果自动转化为一个日期时间值:

      mysql> SELECT DATE_ADD(''1999-01-01'', INTERVAL 1 DAY);-> ''1999-01-02''mysql> SELECT DATE_ADD(''1999-01-01'', INTERVAL 1 HOUR);-> ''1999-01-01 01:00:00''

      假如你使用了格式严重错误的日期,则结果为 NULL。假如你添加了 MONTH、YEAR_MONTH或YEAR ,而结果日期中有一天的日期大于添加的月份的日期最大限度,则这个日期自动被调整为添加月份的最大日期:

      mysql> SELECT DATE_ADD(''1998-01-30'', INTERVAL 1 MONTH);-> ''1998-02-28''

      ◆ DATE_FORMAT(date,format)

      根据format 字符串安排date 值的格式。

      以下说明符可用在 format 字符串中:

      说明符说明

      %a工作日的缩写名称 (Sun..Sat)

      %b月份的缩写名称 (Jan..Dec)

      %c月份,数字形式(0..12)

      %D带有英语后缀的该月日期 (0th, 1st, 2nd, 3rd, ...)

      %d该月日期, 数字形式 (00..31)

      %e该月日期, 数字形式(0..31)

      %f微秒 (000000..999999)

      %H小时(00..23)

      %h小时(01..12)

      %I小时 (01..12)

      %i分钟,数字形式 (00..59)

      %j一年中的天数 (001..366)

      %k小时 (0..23)

      %l小时 (1..12)

      %M月份名称 (January..December)

      %m月份, 数字形式 (00..12)

      %p上午(AM)或下午( PM)

      %r时间 , 12小时制 (小时hh:分钟mm:秒数ss 后加 AM或PM)

      %S秒 (00..59)

      %s秒 (00..59)

      %T时间 , 24小时制 (小时hh:分钟mm:秒数ss)

      %U周 (00..53), 其中周日为每周的第一天

      %u周 (00..53), 其中周一为每周的第一天

      %V周 (01..53), 其中周日为每周的第一天 ; 和 %X同时使用

      %v周 (01..53), 其中周一为每周的第一天 ; 和 %x同时使用

      %W工作日名称 (周日..周六)

      %w一周中的每日 (0=周日..6=周六)

      %X该周的年份,其中周日为每周的第一天, 数字形式,4位数;和%V同时使用

      %x该周的年份,其中周一为每周的第一天, 数字形式,4位数;和%v同时使用

      %Y年份, 数字形式,4位数

      %y年份, 数字形式 (2位数)

      %%‘%’文字字符

      所有其它字符都被复制到结果中,无需作出解释。

      注意:‘%’字符要求在格式指定符之前。

      月份和日期说明符的范围从零开始,原因是 MySQL允许存储诸如 ''2004-00-00''的不完全日期.

      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''mysql> SELECT DATE_FORMAT(''1999-01-01'', ''%X %V'');-> ''1998 52''

      ◆ DAY(date)

      DAY() 和DAYOFMONTH()的意义相同。

      ◆ DAYNAME(date)

      返回date 对应的工作日名称。

      mysql> SELECT DAYNAME(''1998-02-05'');-> ''周四''

      ◆ DAYOFMONTH(date)

      返回date 对应的该月日期,范围是从 1到31。

      mysql> SELECT DAYOFMONTH(''1998-02-03'');-> 3

      ◆ DAYOFWEEK(date)

      返回date (1 = 周日, 2 = 周一, ..., 7 = 周六)对应的工作日索引。这些索引值符合 ODBC标准。

      mysql> SELECT DAYOFWEEK(''1998-02-03'');-> 3

      ◆ DAYOFYEAR(date)

      返回date 对应的一年中的天数,范围是从 1到366。

      mysql> SELECT DAYOFYEAR(''1998-02-03'');-> 34

      ◆ EXTRACT(type FROM date)

      EXTRACT()函数所使用的时间间隔类型说明符同 DATE_ADD()或DATE_SUB()的相同,但它从日期中提取其部分,而不是执行日期运算。

      mysql> SELECT EXTRACT(YEAR FROM ''1999-07-02'');-> 1999mysql> SELECT EXTRACT(YEAR_MONTH FROM ''1999-07-02 01:02:03'');-> 199907mysql> SELECT EXTRACT(DAY_MINUTE FROM ''1999-07-02 01:02:03'');-> 20102mysql> SELECT EXTRACT(MICROSECOND-> FROM ''2003-01-02 10:30:00.00123'');-> 123

      ◆ FROM_DAYS(N)

      给定一个天数 N, 返回一个DATE值。

      mysql> SELECT FROM_DAYS(729669);-> ''1997-10-07''

      使用 FROM_DAYS()处理古老日期时,务必谨慎。他不用于处理阳历出现前的日期(1582)。请参见12.6节,“MySQL使用什么日历?”。

      ◆ FROM_UNIXTIME(unix_timestamp) , FROM_UNIXTIME(unix_timestamp,format)

      返回''YYYY-MM-DD HH:MM:SS''或YYYYMMDDHHMMSS 格式值的unix_timestamp参数表示,具体格式取决于该函数是否用在字符串中或是数字语境中。

      若format 已经给出,则结果的格式是根据format 字符串而定。 format 可以包含同DATE_FORMAT() 函数输入项列表中相同的说明符。

      mysql> SELECT FROM_UNIXTIME(875996580);-> ''1997-10-04 22:23:00''mysql> SELECT FROM_UNIXTIME(875996580) + 0;-> 19971004222300mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),-> ''%Y %D %M %h:%i:%s %x'');-> ''2003 6th August 06:22:58 2003''

      ◆ GET_FORMAT(DATE|TIME|DATETIME, ''EUR''|''USA''|''JIS''|''ISO''|''INTERNAL'')

      返回一个格式字符串。这个函数在同DATE_FORMAT() 及STR_TO_DATE()函数结合时很有用。

      第一个参数的3个可能值和第二个参数的5个可能值产生 15 个可能格式字符串 (对于使用的说明符,请参见DATE_FORMAT()函数说明表 )。

      

      ISO 格式为ISO 9075, 而非ISO 8601.

      也可以使用TIMESTAMP, 这时GET_FORMAT()的返回值和DATETIME相同。

      mysql> SELECT DATE_FORMAT(''2003-10-03'',GET_FORMAT(DATE,''EUR''));-> ''03.10.2003''mysql> SELECT STR_TO_DATE(''10.31.2003'',GET_FORMAT(DATE,''USA''));-> ''2003-10-31''

      ◆ HOUR(time)

      返回time 对应的小时数。对于日时值的返回值范围是从 0 到 23 。

      mysql> SELECT HOUR(''10:05:03'');-> 10

      然而, TIME 值的范围实际上非常大, 所以HOUR可以返回大于23的值。

      mysql> SELECT HOUR(''272:59:59'');-> 272

      ◆ LAST_DAY(date)

      获取一个日期或日期时间值,返回该月最后一天对应的值。若参数无效,则返回NULL。

      mysql> SELECT LAST_DAY(''2003-02-05'');-> ''2003-02-28''mysql> SELECT LAST_DAY(''2004-02-05'');-> ''2004-02-29''mysql> SELECT LAST_DAY(''2004-01-01 01:01:01'');-> ''2004-01-31''mysql> SELECT LAST_DAY(''2003-03-32'');-> NULL

      ◆ LOCALTIME, LOCALTIME()

      LOCALTIME 及 LOCALTIME()和NOW()具有相同意义。

      ◆ LOCALTIMESTAMP, LOCALTIMESTAMP()

      LOCALTIMESTAMP和LOCALTIMESTAMP()和NOW()具有相同意义。

      ◆ MAKEDATE(year,dayofyear)

      给出年份值和一年中的天数值,返回一个日期。dayofyear 必须大于 0 ,否则结果为 NULL。

      mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);-> ''2001-01-31'', ''2001-02-01''mysql> SELECT MAKEDATE(2001,365), MAKEDATE(2004,365);-> ''2001-12-31'', ''2004-12-30''mysql> SELECT MAKEDATE(2001,0);-> NULL

      ◆ MAKETIME(hour,minute,second)

      返回由hour、 minute和second 参数计算得出的时间值。

      mysql> SELECT MAKETIME(12,15,30);-> ''12:15:30''

      ◆ MICROSECOND(expr)

      从时间或日期时间表达式expr返回微秒值,其数字范围从 0到 999999。

      mysql> SELECT MICROSECOND(''12:00:00.123456'');-> 123456mysql> SELECT MICROSECOND(''1997-12-31 23:59:59.000010'');-> 10

      ◆ MINUTE(time)

      返回 time 对应的分钟数,范围是从 0 到 59。

      mysql> SELECT MINUTE(''98-02-03 10:05:03'');-> 5

      ◆ MONTH(date)

      返回date 对应的月份,范围时从 1 到 12。

      mysql> SELECT MONTH(''1998-02-03'');-> 2

      ◆ MONTHNAME(date)

      返回date 对应月份的全名。

      mysql> SELECT MONTHNAME(''1998-02-05'');-> ''February ''

      ◆ NOW()

      返回当前日期和时间值,其格式为 ''YYYY-MM-DD HH:MM:SS'' 或YYYYMMDDHHMMSS , 具体格式取决于该函数是否用在字符串中或数字语境中。

      mysql> SELECT NOW();-> ''1997-12-15 23:50:26''mysql> SELECT NOW() + 0;-> 19971215235026

      在一个存储程序或触发器内, NOW() 返回一个常数时间,该常数指示了该程序或触发语句开始执行的时间。这同SYSDATE()的运行有所不同。

      ◆ 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

      ◆ QUARTER(date)

      返回date 对应的一年中的季度值,范围是从 1到 4。

      mysql> SELECT QUARTER(''98-04-01'');-> 2

      ◆ SECOND(time)

      返回time 对应的秒数, 范围是从 0到59。

      mysql> SELECT SECOND(''10:05:03'');-> 3

      ◆ 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

      ◆ STR_TO_DATE(str,format)

      这是DATE_FORMAT() 函数的倒转。它获取一个字符串 str 和一个格式字符串format。若格式字符串包含日期和时间部分,则 STR_TO_DATE()返回一个 DATETIME 值, 若该字符串只包含日期部分或时间部分,则返回一个 DATE 或TIME值。

      str所包含的日期、时间或日期时间值应该在format指示的格式中被给定。对于可用在format中的说明符,请参见DATE_FORMAT() 函数说明表。 所有其它的字符被逐字获取,因此不会被解释。若 str 包含一个非法日期、时间或日期时间值,则 STR_TO_DATE()返回NULL。同时,一个非法值会引起警告。

      mysql> SELECT STR_TO_DATE(''00/00/0000'', ''%m/%d/%Y'');-> ''0000-00-00''mysql> SELECT STR_TO_DATE(''04/31/2004'', ''%m/%d/%Y'');-> ''2004-04-31''

      ◆ SUBDATE(date,INTERVAL expr type) SUBDATE(expr,days)

      当被第二个参数的 INTERVAL型式调用时, SUBDATE()和DATE_SUB()的意义相同。对于有关INTERVAL参数的信息, 见有关 DATE_ADD()的讨论。

      mysql> SELECT DATE_SUB(''1998-01-02'', INTERVAL 31 DAY);-> ''1997-12-02''mysql> SELECT SUBDATE(''1998-01-02'', INTERVAL 31 DAY);-> ''1997-12-02''

      第二个形式允许对days使用整数值。在这些情况下,它被算作由日期或日期时间表达式 expr中提取的天数。

      mysql> SELECT SUBDATE(''1998-01-02 12:00:00'', 31);-> ''1997-12-02 12:00:00''

      注意不能使用格式 "%X%V" 来将一个 year-week 字符串转化为一个日期,原因是当一个星期跨越一个月份界限时,一个年和星期的组合不能标示一个唯一的年和月份。若要将year-week转化为一个日期,则也应指定具体工作日:

      mysql> select str_to_date(''200442 Monday'', ''%X%V %W'');-> 2004-10-18

      ◆ SUBTIME(expr,expr2)

      SUBTIME()从expr 中提取expr2 ,然后返回结果。expr 是一个时间或日期时间表达式,而xpr2 是一个时间表达式。

      mysql> SELECT SUBTIME(''1997-12-31 23:59:59.999999'',''1 1:1:1.000002'');-> ''1997-12-30 22:58:58.999997''mysql> SELECT SUBTIME(''01:00:00.999999'', ''02:00:00.999998'');-> ''-00:59:59.999999''

      ◆ SYSDATE()

      返回当前日期和时间值,格式为''YYYY-MM-DD HH:MM:SS'' 或YYYYMMDDHHMMSS, 具体格式根据函数是否用在字符串或数字语境而定。

      在一个存储程序或触发器中, SYSDATE()返回其执行的时间, 而非存储成都或触发语句开始执行的时间。这个NOW()的运作有所不同。

      ◆ TIME(expr)

      提取一个时间或日期时间表达式的时间部分,并将其以字符串形式返回。

      mysql> SELECT TIME(''2003-12-31 01:02:03'');-> ''01:02:03''mysql> SELECT TIME(''2003-12-31 01:02:03.000123'');-> ''01:02:03.000123''

      ◆ TIMEDIFF(expr,expr2)

      TIMEDIFF() 返回起始时间 expr 和结束时间expr2 之间的时间。 expr 和expr2 为时间或 date-and-time 表达式,两个的类型必须一样。

      mysql> SELECT TIMEDIFF(''2000:01:01 00:00:00'',-> ''2000:01:01 00:00:00.000001'');-> ''-00:00:00.000001''mysql> SELECT TIMEDIFF(''1997-12-31 23:59:59.000001'',-> ''1997-12-30 01:01:01.000002'');-> ''46:58:57.999999''

      ◆ TIMESTAMP(expr) , TIMESTAMP(expr,expr2)

      对于一个单参数,该函数将日期或日期时间表达式 expr 作为日期时间值返回.对于两个参数, 它将时间表达式 expr2 添加到日期或日期时间表达式 expr 中,将theresult作为日期时间值返回。

      mysql> SELECT TIMESTAMP(''2003-12-31'');-> ''2003-12-31 00:00:00''mysql> SELECT TIMESTAMP(''2003-12-31 12:00:00'',''12:00:00'');-> ''2004-01-01 00:00:00''

      ◆ TIMESTAMPADD(interval,int_expr,datetime_expr)

      将整型表达式int_expr 添加到日期或日期时间表达式 datetime_expr中。 int_expr 的单位被时间间隔参数给定,该参数必须是以下值的其中一个: FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER或 YEAR。

      可使用所显示的关键词指定Interval值,或使用SQL_TSI_前缀。例如, DAY或SQL_TSI_DAY 都是正确的。

      mysql> SELECT TIMESTAMPADD(MINUTE,1,''2003-01-02'');-> ''2003-01-02 00:01:00''mysql> SELECT TIMESTAMPADD(WEEK,1,''2003-01-02'');-> ''2003-01-09''

      ◆ TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)

      返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其结果的单位由interval 参数给出。interval 的法定值同TIMESTAMPADD()函数说明中所列出的相同。

      mysql> SELECT TIMESTAMPDIFF(MONTH,''2003-02-01'',''2003-05-01'');-> 3mysql> SELECT TIMESTAMPDIFF(YEAR,''2002-05-01'',''2001-01-01'');-> -1

      ◆ TIME_FORMAT(time,format)

      其使用和 DATE_FORMAT()函数相同, 然而format 字符串可能仅会包含处理小时、分钟和秒的格式说明符。其它说明符产生一个NULL值或0。

      若time value包含一个大于23的小时部分,则 %H 和 %k 小时格式说明符会产生一个大于0..23的通常范围的值。另一个小时格式说明符产生小时值模数12。

      mysql> SELECT TIME_FORMAT(''100:00:00'', ''%H %k %h %I %l'');-> ''100 100 04 04 4''

      ◆ TIME_TO_SEC(time)

      返回已转化为秒的time参数。

      mysql> SELECT TIME_TO_SEC(''22:23:00'');-> 80580mysql> SELECT TIME_TO_SEC(''00:39:38'');-> 2378

      ◆ TO_DAYS(date)

      给定一个日期date, 返回一个天数 (从年份0开始的天数 )。

      mysql> SELECT TO_DAYS(950501);-> 728779mysql> SELECT TO_DAYS(''1997-10-07'');-> 729669

      TO_DAYS() 不用于阳历出现(1582)前的值,原因是当日历改变时,遗失的日期不会被考虑在内。

      请记住, MySQL使用“日期和时间类型”中的规则将日期中的二位数年份值转化为四位。例如, ''1997-10-07''和 ''97-10-07'' 被视为同样的日期:

      mysql> SELECT TO_DAYS(''1997-10-07''), TO_DAYS(''97-10-07'');-> 729669, 729669

      对于1582 年之前的日期(或许在其它地区为下一年 ), 该函数的结果实不可靠的。

      ◆ UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

      若无参数调用,则返回一个Unix timestamp (''1970-01-01 00:00:00'' GMT 之后的秒数) 作为无符号整数。若用date 来调用UNIX_TIMESTAMP(),它会将参数值以''1970-01-01 00:00:00'' GMT后的秒数的形式返回。date 可以是一个DATE 字符串、一个 DATETIME字符串、一个 TIMESTAMP或一个当地时间的YYMMDD 或YYYMMDD格式的数字。

      mysql> SELECT UNIX_TIMESTAMP();-> 882226357mysql> SELECT UNIX_TIMESTAMP(''1997-10-04 22:23:00'');-> 875996580

      当 UNIX_TIMESTAMP被用在 TIMESTAMP列时, 函数直接返回内部时戳值, 而不进行任何隐含的 “string-to-Unix-timestamp”转化。假如你向UNIX_TIMESTAMP()传递一个溢出日期,它会返回 0,但请注意只有基本范围检查会被履行 (年份从1970 到 2037, 月份从01到12,日期从 01 到31)。

      假如你想要减去 UNIX_TIMESTAMP() 列, 你或许希望删去带符号整数的结果。

      ◆ UTC_DATE, UTC_DATE()

      返回当前 UTC日期值,其格式为 ''YYYY-MM-DD'' 或 YYYYMMDD,具体格式取决于函数是否用在字符串或数字语境中。

      mysql> SELECT UTC_DATE(), UTC_DATE() + 0;-> ''2003-08-14'', 20030814

      ◆ UTC_TIME, UTC_TIME()

      返回当前 UTC 值,其格式为 ''HH:MM:SS'' 或HHMMSS,具体格式根据该函数是否用在字符串或数字语境而定。

      mysql> SELECT UTC_TIME(), UTC_TIME() + 0;-> ''18:07:53'', 180753

      ◆ UTC_TIMESTAMP, UTC_TIMESTAMP()

      返回当前UTC日期及时间值,格式为 ''YYYY-MM-DD HH:MM:SS'' 或YYYYMMDDHHMMSS,具体格式根据该函数是否用在字符串或数字语境而定。

      mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;-> ''2003-08-14 18:08:04'', 20030814180804

      ◆ WEEK(date[,mode])

      该函数返回date 对应的星期数。WEEK() 的双参数形式允许你指定该星期是否起始于周日或周一, 以及返回值的范围是否为从0 到53 或从1 到53。若 mode参数被省略,则使用default_week_format系统自变量的值。请参见5.3.3节,“服务器系统变量”。

      以下表说明了mode 参数的工作过程:

      

      mysql> SELECT WEEK(''1998-02-20'');-> 7mysql> SELECT WEEK(''1998-02-20'',0);-> 7mysql> SELECT WEEK(''1998-02-20'',1);-> 8mysql> SELECT WEEK(''1998-12-31'',1);-> 53

      注意,假如有一个日期位于前一年的最后一周, 若你不使用2、3、6或7作为mode 参数选择,则MySQL返回 0:

      mysql> SELECT YEAR(''2000-01-01''), WEEK(''2000-01-01'',0);-> 2000, 0

      有人或许会提出意见,认为 MySQL 对于WEEK() 函数应该返回 52 ,原因是给定的日期实际上发生在1999年的第52周。我们决定返回0作为代替的原因是我们希望该函数能返回“给定年份的星期数”。这使得WEEK() 函数在同其它从日期中抽取日期部分的函数结合时的使用更加可靠。

      假如你更希望所计算的关于年份的结果包括给定日期所在周的第一天,则应使用 0、2、5或 7 作为mode参数选择。

      mysql> SELECT WEEK(''2000-01-01'',2);-> 52

      作为选择,可使用 YEARWEEK()函数:

      mysql> SELECT YEARWEEK(''2000-01-01'');-> 199952mysql> SELECT MID(YEARWEEK(''2000-01-01''),5,2);-> ''52''

      ◆ WEEKDAY(date)

      返回date (0 = 周一, 1 = 周二, ... 6 = 周日)对应的工作日索引 weekday index for

      mysql> SELECT WEEKDAY(''1998-02-03 22:23:00'');-> 1mysql> SELECT WEEKDAY(''1997-11-05'');-> 2

      ◆ WEEKOFYEAR(date)

      将该日期的阳历周以数字形式返回,范围是从1到53。它是一个兼容度函数,相当于WEEK(date,3)。

      mysql> SELECT WEEKOFYEAR(''1998-02-20'');-> 8

      ◆ YEAR(date)

      返回date 对应的年份,范围是从1000到9999。

      mysql> SELECT YEAR(''98-02-03'');-> 1998

      ◆ YEARWEEK(date), YEARWEEK(date,start)

      返回一个日期对应的年或周。start参数的工作同 start参数对 WEEK()的工作相同。结果中的年份可以和该年的第一周和最后一周对应的日期参数有所不同。

      mysql> SELECT YEARWEEK(''1987-01-01'');-> 198653

      注意,周数和WEEK()函数队可选参数0或 1可能会返回的(0) w有所不同,原因是此时 WEEK() 返回给定年份的语境中的周。


    展开全文
  • 目录 1、Tableau中的运算符 ...(3)日期函数 (4)聚合函数 (5)类型转换函数 (6)逻辑函数 3、在tableau中创建公式 4、Tableau数值计算 (1)计算字段 (2)聚合字段 5、Tableau字符串计算 6、T...

    目录

    1、Tableau中的运算符

    (1)常规运算符

    (2)算术运算符

    (3)比较运算符

    (4)逻辑运算符

    (5)优先级

    2、函数

    (1)数字函数

    (2)字符串函数

    (3)日期函数

    (4)聚合函数

    (5)类型转换函数

    (6)逻辑函数

    3、在tableau中创建公式

    4、Tableau数值计算

    (1)计算字段

    (2)聚合字段

    5、Tableau字符串计算

    6、Tableau日期计算

    7、表计算

    (1)表计算01-差异计算

    (2)百分比差异计算

    (3)百分比计算

    (4)总额百分比计算

    (5)表计算05-排名计算

    (6)表计算06-百分位计算

    (7)汇总计算

    (8)表计算08-移动计算

    (9)快速表计算

    8、临时计算

    1、Tableau中的运算符

    运算符是一个符号,通知编译器执行特定的数学或逻辑操作,Tableau有多个运算符用于创建计算字段和公式,可用的运算符的详细信息和操作的顺序(优先级)如下:

    运算符类型:常规运算符、算术运算符、关系运算符、逻辑运算符

    (1)常规运算符

    下表显示了Tableau支持的常规运算符。这些运算符对数字、字符和日期数据类型起作用

            运算符

                    描述                      例子
    +(addition)

    它添加两个数字,

    它连接两个字符串,

    它增加了日期的天数

    7+3 利润+销售额

    \'abc\'+\'def\'=\'abcdef\'

    #April 15,2004# + 15 =

    #April 30,2004#

    -(subtraction)

    它减去两个数字

    它从日期中减去天数

    -(7+3) = -10

    #April16,2004# - 15 =

    #April1,2004#

    (2)算术运算符

    这些运算符仅对数字数据类型起作用

            运算符                     描述                  例子
    *(Multiplication)数值乘法23 * 2 =46
    /(Division)数字部45/2 = 22.5
    %(modulo)数值分割提醒13%2 = 1
    ^(power)提升到权力2 ^ 3 = 8

    (3)比较运算符

    这些运算符用于表达式,每个运算符比较两个数字、日期或字符串,并返回布尔值(TRUE或FALSE)

         运算符                           描述               例子

    2 ^ 3 = 8…

    (此时=不是赋值等号)

    比较两个数字或两个字符串或两个日期相等。返回布尔值TRUE或FALSE

    \'Hello\'=\'Hello\'

    S = 15/3

    ! = 或(不等于)比较两个数字或两个字符串或两个日期不相等。返回布尔值TRUE,如果他们返回FALSE

    \'好\'\'坏\'

    18! = 37/2

    >(大于)

    等等

    比较两个数字或两个字符串或两个日期,其中第一个参数大于秒。返回FALSE或TRUE

    [利润] > 2000

    [Category] > \'Q\'

    [发货日期] >= April 1,2004#

     比较两个数字或两个字符串或两个日期,其中第一个参数小于秒。返回FALSE或TRUE

    [利润]

    [类别]

    [发货日期]

    (4)逻辑运算符

    这些运算符用于其结果为布尔值的表达式,给出输出为TRUE或FALSE

    运算符描述例子
    AND如果存在于AND运算符两侧的表达式或布尔值被计算为TRUE,则结果为TRUE。 否则结果为FALSE。[发货日期]> #April 1,2012#AND [Profit]> 10000
    OR如果存在于AND运算符两侧的任何一个或两个表达式或布尔值被计算为TRUE,则结果为TRUE。 否则结果为FALSE。[发货日期]> #April 1,2012#OR [Profit]> 10000
    NOT此运算符否定其后存在的表达式的布尔值。NOT [Ship Date]> #April 1,2012#

    (5)优先级

    ① -(negate)      ② ^(power)     ③ *,/,%      ④ +,-      ⑤ ==,>,=

    2、函数

    常见内置函数:数字函数、字符串函数、日期函数、逻辑函数、聚合函数

    (1)数字函数

                                                       数字函数
    功能描述例子
    CEILING(number)将数字四舍五入为等于或大于值的最接近的整数

    CEILING(2.145) = 3

    FLOOR(数字)将数字舍入为值相等或更小的最近整数FLOOR(3.1415) = 3
    ROUND(数字,[小数])将数字四舍五入到指定的位数ROUND(3.14152,2) = 3.14
    POWER(基数,次方)将数字提高到指定的地方POWER(5,3) = 125
    ABS(数字)取绝对值ABS(-10)
    ACOS(number)返回给定数字的反余弦,结果以弧度表示ACOS(-1) = 3.14159265358979
    ASIN(number)返回给定数字的反正弦,结果以弧度表示ASIN(1) = 1.5707963267949
    ATAN(number)返回给定数字的反正切,结果以弧度表示ATAN(180) = 1.5652408283942
    ATAN2(y number,x number)返回两个给定数字(x和y)的反正切,结果以弧度表示ATAN2(2,1) = 1.10714

    COS(number);

    COT(number)

    返回角度的余弦,以弧度为单位指定角度;

    返回角度的余切,以弧度为单位指定角度

    COS(PI()/4) = 0.707106781186548;

    COT(PI()/4) = 1

    DEGREES(number)将以弧度表示的给定数字转换为度数DEGREES(PI()/4) = 45.0
    DIV(整数1,整数2)返回将整数1除以整数2的除法运算的整数部分DIV(11,2) = 5
    EXP(number)返回e的给定数字次幂

    EXP(2) = 7,389

    EXP(-[Growth Rate]*[Time])

    LN(number)返回数字的自然对数。如果数字小于或等于0,则返回null 
    LOG(number [,base])返回数字以给定底数为底的对数,如果省略了底数值,则使用底数10 
    MAX(number.number)返回两个参数(必须是同种类型)中的较大值。如果任一参数为null,则返回null,MAX也可应用于聚合计算中的单个字段

    MAX(4,7)

    MAX(Sales,Profit)

    MAX(First Name,[Last Name])

    MIN(number,number)返回两个参数(必须是同种类型)中的较小值。如果任一参数为null,则返回null,MAX也可应用于聚合计算中的单个字段

    MIN(4,7)

    MIN(Sales,Profit)

    MIN(First Name,[Last Name])

    PI()返回数字常量pi:3.14159 
    POWER(number,power)计算数字的指定次幂

    POWER(5,2) = 52 = 25

    POWER(Temperature,2)

    也可以使用^符号:

    5^2 = POWER(5,2) = 25

    Radians(number)将给定数字从度数转换为弧度 RADIANS(180) = 3.14159
    SQUARE(number)返回数字的平方SQUARE(5) = 25

    如何使用:在列/行里都可以,直接输入计算函数,右键选择维度查看计算结果

    (2)字符串函数

    功能描述例子
    ASCII(string)返回string的第一个字符的ASCII代码ASCII('A') = 65
    CHAR(number)返回通过ASCII代码number编码的字符CHAR(65) = 'A'

    Contains(string,substring)

    (区分大小写)

    如果给定字符串包含指定子字符串,则返回trueCONTAINS("Calculation","alcu") = true

    ENDSWITH(string, substring)

    (区分大小写)

    如果给定字符串以指定子字符串结尾,则返回true,会忽略尾随空格ENDSWITH("Tableau","leau") = true
    FIND(string,substring,[start])返回substring在string中的索引位置,如果未找到substring,则返回0。如果添加了可选参数start,则函数会忽略在索引位置start之前出现的任何substring实例,字符串中的第一个字符为位置1

    FIND("Calculation","alcu") = 2

    FIND("Calculation","a",3) = 7

    FIND("Calculation","aswd") = 0

    FINDNTH(string,substring,

    occurrence)

    返回指定字符串内的第n个子字符串的位置,其中n由occurrence参数定义FINDNTH("Calculation","a",2) = 7
    LEFT(string,number)返回字符串最左侧一定数量的字符LEFT("Matador",4) = "Mata"
    LEN(string)返回字符串长度LEN("Matador") = 7

    LOWER(string)

    UPPER(string)

    返回string,其所有字符为小写;

    返回string,其所有字符为大写;

    LOWER("ProductVersion") = "productversion"

    LTRIM(string);

    RTRIM(string);

    TRIM(string)

     

    返回移除了所有前导空格的字符串(只去前,不去后);

    返回移除了所有尾随空格的字符串;

    返回移除了前导和尾随空格的字符串。

    LTRIM("             cij   dcjd         ") = “cij   dcjd         ”

    RTRIM("             cij   dcjd         ") = “             cij   dcjd”

    len(TRIM(" Hello ")) = 5

    MAX(a,b)

    (从左向右依次比较,先比较第一个,比不出依次往后)

    返回a和b(必须为相同类型)中的较大值,此函数常用于比较数字,但也对字符串有效。对于字符串,MAX查找数据库为该列定义的排序序列中的最高值。如果任一参数为Null,则返回NullMAX("APPLE","banana")= "banana"
    MID(string,start,[length])返回从索引位置start开始的字符串。字符串中第一个字符的位置为1.如果添加了可选参数length,则返回的字符串仅包含该数量的字符。

    MID("Calculation",2) = "alculation"

    MID("Calculation",2,5) = "alcul"

    MIN(a,b)返回a和b(必须为相同类型)中的较小值,此函数常用于比较数字,但也对字符串有效。对于字符串,MIN查找排序序列中的最低值,如果任一参数为Null,则返回NullMIN("APPLE","banana")= "APPLE"

    REPLACE(string,substring,

    replacement)

    在string中搜索substring并将其替换为replacement。如果未找到substring,则字符串保持不变REPLACE("V8.5","8.5","9.0") = "V9.0"
    RIGHT(string,number)返回string中最右侧一定数量的字符RIGHT("Calculation",4) = "tion"
    SPACE(number)返回由指定number个重复空格组成的字符串SPACE("1") = " "
    SPLIT(string,delimiter,token number)

    返回字符串中的一个子字符串,并使用分隔符字符将字符串分为一系列标记.

    字符串将被解释为分隔符和标记的交替序列。因此,对于字符串abc-def-i-j,分隔符字符为“-”,标记为abc、def、i、j,将这些标记想像为标记1至4.SPLIT将返回与标记编号对应的标记。如果标记编号为正,则从字符串的左侧开始计算标记,如果标记编号为负,则从右侧开始计算标记。

    SPLIT("a-b-c-d","-",2) = "b"
    STARTSWITH(string,substring)如果string以substring开头,则返回true,会忽略前导空格STARTSWITH("Joker","Jo") = true

    (3)日期函数

    Tableau提供了多种日期函数。许多示例将#符号用于日期表达式。此外,许多日期函数还使用date_part,它是一个常量字符串参数,可以使用的有效date_part值为:

                                                    有效date_part值
    date_part
    'year'四位数年份
    'quarter'1-4
    ‘month’1-12 或 ”January“、”February“等
    ”dayofyear“一年中的第几天:1月1日为1、2月1日为32,以此类推
    ”day“1-31
    ”weekday“1-7 或 ”Sunday“、”Monday“等
    ”week“1-52
    ”hour“0-23
    ”minute“0-59
    ”second“0-60
                                                                               日期函数
    DATEADD(date_part,interval,date)返回指定日期,该日期的指定date_part中添加了指定的数字interval

    DATEADD("month",3,#2004-04-15#) = 2004-07-15  12:00:00 AM

    该表达式会向日期#2004-04-15#添加三个月

    DATEDIFF(date_part,date1,date2,[start_of_week])

    返回date1与date2之差(以date_part的单位表示);

    start_of_week参数(可用于指定哪一天是一周的第一天)是可选的。可能的值为”monday“、”tuesday“等。如果省略,一周的开始由数据源确定。

    DATEDIFF("week",#2013-09-22#,#2013-09-24#,"monday") = 1

     

    DATEDIFF('week',#2013-09-22#,#2013-09-24#,'sunday') = 0

    DATENAME(date_part,date,[start_of_week])

    以字符串的形式返回date的date_part;

    start_of_week参数(可用于指定哪一天是一周的第一天)是可选的。可能的值为”monday“、”tuesday“等。如果省略,一周的开始由数据源确定。

     

    DATENAME('Year',#2004-04-15#) = "2004"

     

    DATENAME('month',#2004-04-15#) = "April"

    DATEPART(date_part,date,[start_of_week])

    以整数的形式返回date的date_part;

    start_of_week参数(可用于指定哪一天是一周的第一天)是可选的。可能的值为”monday“、”tuesday“等。如果省略,一周的开始由数据源确定。

     

    注:当date_part为工作日时,会忽略start_of_week参数。这是因为Tableau依赖固定工作日顺序来应用偏移

    DATEPART('year',#2004-04-15#) = 2004

     

    DATEPART('month',#2004-04-15#) =4

    DATETRUNC(date_part,date,[start_of_week])

    按date_part指定的准确度截断指定日期。此函数返回新日期。例如,以月份级别截断处于月份中间的日期时,此函数返回当月的第一天。

    start_of_week参数(可用于指定哪一天是一周的第一天)是可选的。可能的值为”monday“、”tuesday“等。如果省略,一周的开始由数据源确定。

    DATETRUNC('quarter',#2004-08-15#) = 2004-07-01 12:00:00 AM

     

    DATETRUNC('month',#2004-04-15#) = 2004-04-01 12:00:00 AM

    DAY/MONTH/YEAR(date)以整数的形式返回给定日期的天/月/年DAY(#2004-04-12#) = 12
    ISDATE(string)如果给定字符串为有效日期,则返回trueISDATE("2001-1-23")
    MAKEDATE(year,month,day)

    返回一个依据指定年份、月份和日期构造的日期值;

    可用于Tableau数据提取,检查在其他数据源中的可用性

    MAKEDATE(2004,4,15) = #April 15,2004#
    MAKEDATETIME(date,time)返回合并了date和time的datetime。日期可以是date、datetime或string类型。时间必须是datetime。此功能仅适用于与MySQL兼容的连接(对于Tableau,除MySQL之外,还有Amazon Aurora 和 Amazon Aurora)

    MAKEDATETIME(#1890-12-30#,#07:59:00#) = #12/30/1899  7:59:00 AM#

     

    yyyy/m/d  hh:nn:ss

    NOW()

    返回当前日期和时间。

    返回值因连接的特性而异:

    对于实时、未发布的连接,NOW返回数据服务器时间;

    对于实时、已发布的连接,NOW返回数据服务器时间;

    对于未发布的数据提取,NOW返回本地系统时间;

    对于发布的数据提取,NOW返回Tableau Server数据引擎的本地时间。如果在不同时区中有多台工作计算机,这可能会产生不一致的结果。

    NOW() = 2019/8/21 17:10:01
     
    TODAY()返回当前日期TODAY() = 2019/8/21
     

    (4)聚合函数

    功能描述
    AVG(expression)返回表达式中所有值得平均值。AVG只能与数字字段一起使用,空值被忽略
    COUNT(expression)返回组中的项目数,不计算空值
    COUNTD(expression)返回组中不同项目的数量,不对Null值计数
    MEDIAN(expression)返回所有记录的表达式的中位数,中值只能与数字字段一起使用,空值被忽略
    STDEV(expression)返回基于样本总体的给定表达式中所有值的统一标准偏差
    MIN,MAX,SUM  

    (5)类型转换函数

    计算中任何表达式的结果都可以转换为特定数据类型。转换函数为 STR()、DATE()、DATETIME()、INT() 和 FLOAT()。例如,如果要将浮点数(如 3.14)转换为整数,则可以编写 INT(3.14)。结果为 3(这是整数)。下面介绍了转换函数。

    可以将布尔值转换为整数、浮点数或字符串,但不能将其转换为日期。True 为 1、1.0 或“1”,而 False 为 0、0.0 或“0”。Unknown 映射到 Null。

    功能描述例子
    DATE(expression)在给定数字、字符串或日期表达式的情况下返回日期。

    DATE([Employee Start Date])

    DATE("4/15/2004")=
    2004/4/15

    DATE("April 15, 2004") = #April 15, 2004# DATE(#2006-06-15 14:52#) = #2006-06-15#

     

    注:第二个和第三个,引号不可省

    DATETIME(expression)在给定数字、字符串或日期表达式的情况下返回日期时间。DATETIME(“April 15, 2005 07:59:00”) = April 15, 2005 07:59:00
    DATEPARSE(format, string)将字符串转换为指定格式的日期时间。是否支持某些区域设置特定的格式由计算机的系统设置确定。数据中出现的不需要解析的字母应该用单引号 (' ') 引起来。对于值之间没有分隔符的格式(如 Mmddyy),请验证它们是否按预期方式解析。该格式必须是常量字符串,而非字段值。如果数据与格式不匹配,此函数将返回 Null

    DATEPARSE ("dd.MMMM.yyyy", "15.April.2004") = #April 15, 2004#

    DATEPARSE ("h'h' m'm' s's'", "10h 5m 3s") = #10:05:03#

    FLOAT(expression)将其参数转换为浮点数。

    FLOAT(3) = 3.000

    FLOAT([Age]) 将 Age 字段中的每个值转换为浮点数。

    INT(expression)将其参数转换为整数。对于表达式,此函数将结果截断为最接近于 0 的整数。

    INT(8.0/3.0) = 2

    INT(4.0/1.5) = 2

    INT(0.50/1.0) = 0

    INT(-9.7) = -9

    字符串转换为整数时会先转换为浮点数,然后舍入。

    STR(expression)将其参数转换为字符串。STR([Age]) 会提取名为 Age 的度量中的所有值,并将这些值转换为字符串。

    (6)逻辑函数

    ①AND

    定义:对两个表达式执行逻辑合取计算

    语法:IF <expr1> AND <expr2> THEN <then> END

    例子:IF (ATTR([Market]) = "Africa" AND SUM([Sales]) > [Emerging Threshold] )THEN "Well Performing"

    ②CASE

    定义:执行逻辑测试并返回相应的值。CASE函数可评估expression,并将其与一系列值(value1、value2等)比较,然后返回结果。遇到一个与expression匹配的值时,CASE返回相应的返回值。如果未找到匹配值,则使用默认返回表达式。如果不存在默认返回表达式并且没有任何值匹配,则会返回Null

    语法:CASE <expression> WHEN <value1> THEN <return1> WHEN <value2> THEN <return2> ... ELSE <default return> END

    实例:CASE [Region] WHEN 'West' THEN 1 WHEN 'East' THEN 2 ELSE 3 END

    ③ELSE

    定义:测试一系列表达式,同时为第一个为 true 的 <expr> 返回 <then> 值。

    语法:IF <expr> THEN <then> ELSE <else> END

    示例:If [Profit] > 0 THEN 'Profitable' ELSE 'Loss' END

    ④ELSEIF

    定义:测试一系列表达式,同时为第一个为 true 的 <expr> 返回 <then> 值。

    语法:IF <expr> THEN <then> [ELSEIF <expr2> THEN <then2>...] [ELSE <else>] END

    示例:IF [Profit] > 0 THEN 'Profitable' ELSEIF [Profit] = 0 THEN 'Breakeven' ELSE 'Loss' END

    ⑤END

    定义:测试一系列表达式,同时为第一个为 true 的 <expr> 返回 <then> 值。必须放在表达式的结尾。

    语法:IF <expr> THEN <then> [ELSEIF <expr2> THEN <then2>...] [ELSE <else>] END

    示例:IF [Profit] > 0 THEN 'Profitable' ELSEIF [Profit] = 0 THEN 'Breakeven' ELSE 'Loss' END

    ⑥IF

    定义:测试一系列表达式,同时为第一个为 true 的 <expr> 返回 <then> 值。

    语法:IF <expr> THEN <then> [ELSEIF <expr2> THEN <then2>...] [ELSE <else>] END

    示例:IF [Profit] > 0 THEN 'Profitable' ELSEIF [Profit] = 0 THEN 'Breakeven' ELSE 'Loss' END

    ⑦IFNULL

    定义:如果 <expr1> 不为 null,则返回该表达式,否则返回 <expr2>。

    语法:IFNULL(expr1, expr2)

    示例:IFNULL([Profit], 0)

    ⑧IIF

    定义:检查某个条件是否得到满足,如果为 TRUE 则返回一个值,如果为 FALSE 则返回另一个值,如果未知,则返回可选的第三个值或 NULL。

    语法:IIF(test, then, else, [unknown])

    示例:IIF([Profit] > 0, 'Profit', 'Loss')

    ⑨ISDATE

    定义:如果给定字符串为有效日期,则返回 true。

    语法:ISDATE(string)

    示例:ISDATE("2004-04-15") = True

    ⑩ISNULL

    定义:如果表达式未包含有效数据 (Null),则返回 true。

    语法:ISNULL(expression)

    示例:ISNULL([Profit])

    11 MAX

    定义:返回单一表达式所有记录中的最大值,或返回每条记录两个表达式中的最大值。

    语法:MAX(expression) 或 Max(expr1, expr2)

    示例:MAX([Sales])

    12 MIN

    定义:返回单一表达式所有记录中的最小值,或返回每条记录两个表达式中的最小值。

    语法:MIN(expression) 或 MIN(expr1, expr2)

    示例:MIN([Profit])

    13 NOT

    定义:对两个表达式执行逻辑非运算。

    语法:IF NOT <expr> THEN <then> END

    示例:IF NOT [Profit] > 0 THEN "Unprofitable" END

    或者

    定义:对两个表达式执行逻辑析取操作。

    语法:IF <expr1> OR <expr2> THEN <then> END

    示例:IF [Profit] < 0 OR [Profit] = 0 THEN "Needs Improvement" END

    14 THEN

    定义:测试一系列表达式,同时为第一个为 true 的 <expr> 返回 <then> 值。

    语法:IF <expre> THEN <then> [ELSEIF ,expr2> THEN <then2>...] [ELSE <else>] END

    示例:IF [Profit] > 0 THEN 'Profitable' ELSEIF [Profit] = 0 THEN 'Break even' ELSE 'unprofitable' END

    15 WHEN

    定义:查找第一个与 <expr> 匹配的 <value>,并返回对应的 <return>。

    语法:CASE <expr> WHEN <Value1> THEN <return1> ... [ELSE <else>] END

    示例:CASE [RomanNumberal] WHEN 'I' THEN 1 WHEN 'II' THEN 2 ELSE 3 END

    16 ZN

    定义:如果 <expression> 不为 null,则返回该表达式,否则返回零。

    语法:ZN(expression)

    示例:ZN([Profit])

    3、在tableau中创建公式

    4、Tableau数值计算

    (1)计算字段

    (2)聚合字段

    5、Tableau字符串计算

    6、Tableau日期计算

    示例:了解每种商品的【订单日期】与【发货日期】的时间总间隔

    7、表计算

    (1)表计算01-差异计算

    原始图表:

    ①居中:

    ②设置货币格式

    ③差异计算

               

    (2)百分比差异计算

    (3)百分比计算

    :”百分比“表计算会将值计算为某个其他值的百分比 - 通常计算为表中前一个值的百分比

         

    (4)总额百分比计算

    对于视图中的每个标记,“总额百分比”表计算会将值计算为当前分区中所有值的百分比。

        

    (5)表计算05-排名计算

    “排名”表计算将计算分区中每个值的排名

    (6)表计算06-百分位计算

    “百分位”表计算将在分区中计算每个值的百分位排名。

    对于表计算,分配给最低排名值得百分位为0,分配给最高排名值的百分位为100(默认升序),系统会按排名为所有值分配百分位,因此,对于1、3、22、67这一组的四个值,百分位将分别为0%、33%、67%和100%。

    (7)汇总计算

    对于“汇总”和“移动计算”表计算,您可以选择转换两次值,以获得您想要的结果-即除了添加主要计算之外再添加从属表计算。例如:可以添加一个初始表计算来计算每一年内每个月的销售汇总,然后添加从属计算一年与下一年同期相比每个月的年基差异百分比。

    ①汇总计算

           

    ②从属计算

       

      

    (8)表计算08-移动计算

    “移动计算”表计算(有时称为 滚动计算)会对当前值之前和/或之后指定数目的值执行聚合(总计值、平均值、最小值或最大值)来确定视图中的标记值。移动计算通常用于平滑短期数据波动,这样可以查看长期趋势。例如,对于证券数据,市场每天都在波动,很难通过每日的上升和下降把握全局,可以使用移动计算来定义一系列值通过所选聚合进行汇总。

    (9)快速表计算

    8、临时计算

    (1)临时计算是在处理视图中功能区上的字段时可创建和更新的计算;临时计算也称为调用类型输入计算或内联计算

    (2)多行临时计算

    键入临时计算时,可以使用Shift+Enter另起一行。但是,临时计算中只有当前行始终可见,因此对于正在查看或编辑计算并且无法得知计算中包含多行的任何人来说,这可能会造成混淆。

    多行临时计算的第一行可能是用作计算标题的备注。这是提交计算之后功能区唯一可见的行。

    //City  and  State       //代表注释

    [City] +' , ' + [State]

     

    展开全文
  • SPARK-SQL内置函数之时间日期

    千次阅读 2018-05-30 16:33:15
    转载请注明转自:http://www.cnblogs.com/feiyumo/p/8760846.html一、获取当前时间1.current_date获取当前日期2018-04-092.current_timestamp/now()获取当前时间2018-04-09 15:20:49.247二、从日期时间中提取字段 1...

    转载请注明转自:http://www.cnblogs.com/feiyumo/p/8760846.html

    一、获取当前时间

    1.current_date获取当前日期

    2018-04-09

    2.current_timestamp/now()获取当前时间

    2018-04-09 15:20:49.247

    二、从日期时间中提取字段 

    1.year,month,day/dayofmonth,hour,minute,second

    Examples:SELECT day('2009-07-30'); 30

    2.dayofweek (1 = Sunday, 2 = Monday, ..., 7 = Saturday),dayofyear

    Examples:SELECT dayofweek('2009-07-30');   5

    Since: 2.3.0

    3.weekofyear

    weekofyear(date) - Returns the week of the year of the given date. A week is considered to start on a Monday and week 1 is the first week with >3 days.

    Examples:SELECT weekofyear('2008-02-20');   8

    4.trunc截取某部分的日期,其他部分默认为01

    第二个参数 ["year", "yyyy", "yy", "mon", "month", "mm"]

    Examples:

    > SELECT trunc('2009-02-12', 'MM');
     2009-02-01 > SELECT trunc('2015-10-27', 'YEAR'); 2015-01-01 

    5.date_trunc ["YEAR", "YYYY", "YY", "MON", "MONTH", "MM", "DAY", "DD", "HOUR", "MINUTE", "SECOND", "WEEK", "QUARTER"]

    Examples:SELECT date_trunc('2015-03-05T09:32:05.359', 'HOUR');  2015-03-05T09:00:00

    Since: 2.3.0

    6.date_format将时间转化为某种格式的字符串

    Examples:SELECT date_format('2016-04-08', 'y');    2016

    三、日期时间转换

    1.unix_timestamp返回当前时间的unix时间戳

    Examples:

    > SELECT unix_timestamp();  1476884637
    > SELECT unix_timestamp('2016-04-08', 'yyyy-MM-dd');   1460041200

    2.from_unixtime将时间戳换算成当前时间,to_unix_timestamp将时间转化为时间戳

    Examples:

    > SELECT from_unixtime(0, 'yyyy-MM-dd HH:mm:ss');  1970-01-01 00:00:00 >SELECT to_unix_timestamp('2016-04-08', 'yyyy-MM-dd');  1460041200 

    3.to_date/date将字符串转化为日期格式,to_timestamp(Since: 2.2.0)

    > SELECT to_date('2009-07-30 04:17:52');  2009-07-30 > SELECT to_date('2016-12-31', 'yyyy-MM-dd');   2016-12-31 
    > SELECT to_timestamp('2016-12-31 00:12:00');   2016-12-31 00:12:00

    4.quarter 将1年4等分(range 1 to 4)

    Examples:SELECT quarter('2016-08-31');  3

    四、日期、时间计算

    1.months_between两个日期之间的月数

    months_between(timestamp1, timestamp2) - Returns number of months between timestamp1 and timestamp2.

    Examples:SELECT months_between('1997-02-28 10:30:00', '1996-10-30');  3.94959677

    2. add_months返回日期后n个月后的日期

    Examples:SELECT add_months('2016-08-31', 1);  2016-09-30

    3.last_day(date),next_day(start_date, day_of_week)

    Examples:

    > SELECT last_day('2009-01-12');  2009-01-31
    > SELECT next_day('2015-01-14', 'TU');  2015-01-20

    4.date_add,date_sub(减)

    date_add(start_date, num_days) - Returns the date that is num_days after start_date.

    Examples:

    > SELECT date_add('2016-07-30', 1);  2016-07-31

    5.datediff(两个日期间的天数)

    datediff(endDate, startDate) - Returns the number of days from startDate to endDate.

    Examples:SELECT datediff('2009-07-31', '2009-07-30'); 1

    6.关于UTC时间

    to_utc_timestamp

    to_utc_timestamp(timestamp, timezone) - Given a timestamp like '2017-07-14 02:40:00.0', interprets it as a time in the given time zone, and renders that time as a timestamp in UTC. For example, 'GMT+1' would yield '2017-07-14 01:40:00.0'.

    Examples:SELECT to_utc_timestamp('2016-08-31', 'Asia/Seoul');  2016-08-30 15:00:0

    from_utc_timestamp

    from_utc_timestamp(timestamp, timezone) - Given a timestamp like '2017-07-14 02:40:00.0', interprets it as a time in UTC, and renders that time as a timestamp in the given time zone. For example, 'GMT+1' would yield '2017-07-14 03:40:00.0'.

    Examples:SELECT from_utc_timestamp('2016-08-31', 'Asia/Seoul');  2016-08-31 09:00:00

    展开全文
  • Oracle日期函数: MONTHS_BETWEEN:返回两个日期之间月份的差值 MONTHS_BETWEEN('01-EP-95','11-JAN-94') ===>19.6774194 ADD_MONTHS:在日期上加上份数. ADD_MONTHS('11-JAN-94',6) ===>'11-JUL-94' ...
  • 今天看到了MySQL的日期函数,里面很多有用的,这里只把两个参数不太好记的粘下来了。 DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type) 这些函数执行日期运算。 date 是...
  • sql--日期、聚合函数、saclar函数

    千次阅读 2018-12-09 23:25:30
    Date()提取日期日期/时间表达式的日期部分 Extract()返回日期/时间的单独部分 Date_add()向日期添加指定的时间间隔 Date_sub()从日期减去指定的时间间隔 Datediff()返回两个日期之间的天数 Date_format()用.....
  • 这是个目录1、TODAY与NOWTODAYNOW2、提取年月日星期数函数YEARMONTHDAYWEEKDAY 1、TODAY与NOW TODAY 函数定义: 计算当前的日期。 使用格式: TODAY() 参数定义: 要点: 由于TODAY函数返回的当前日期为序列号,...
  • FineReport中日期时间函数使用总结

    千次阅读 2019-04-08 11:36:00
    说明:凡函数中以日期作为参数因子的,其中日期的形式都必须是yy/mm/dd。而且必须用英文环境下双引号(" ")引用。DATEDATE(year,month,day):返回一个表示某一特定日期的系列数。Year:代表年,可为一到四位数。Month:...
  • 帆软中常用的日期函数

    万次阅读 2019-03-23 09:05:17
    转化日期 通过date(year,month,day)进行转化日期。 在单元格中输入:=date(2011,1,10),其返回值为2011-01-10。... 注:日期同理,若超过最大天数,会从月的一号开始向上累加。 2 当前日期(年月日)...
  • MySql 日期和时间函数

    千次阅读 2010-06-03 11:18:00
    http://dev.mysql.com/doc/refman/5.1/zh/functions.html#date-and-time-functions<br />日期和时间函数 <br /> 本章论述了一些可用于操作时间值的函数。关于每个时间和日期类型具有的值域及指定值的有效...
  • Oracle函数

    万次阅读 多人点赞 2016-05-16 17:43:09
    概述ORACLE函数系列:Oracle常见函数大全Oracle-分析函数之连续求和sum(…) over(…)Oracle-分析函数之排序值rank()和dense_rank()Oracle-分析函数之排序后顺序号row_number()Oracle-分析函数之取上下行数据lag()和...
  • hive中日期函数分区 获取分区的方法

    千次阅读 2019-10-08 15:44:17
    hive中按 日 月 年 分区 ...直接将查询的日期作为分区即可 insert overwrite table sale_store_timeline partition (inc_day) select business_date --营业日期 ,date_type ,avg_cus_price ,business_d...
  • 接上一篇文章:Autojs官方提取文档使用说明函数 (1) Images Stability: 2 - Stable images模块提供了一些手机设备中常见的图片处理函数,包括截图、读写图片、图片剪裁、旋转、二值化、找色找图等。 该模块...
  • mysql日期时间操作函数详解

    千次阅读 2017-12-22 21:16:36
    假如你添加了 MONTH、YEAR_MONTH或YEAR ,而结果日期中有一天的日期大于添加的月份的日期最大限度,则这个日期自动被调整为添加月份的最大日期: mysql> SELECT DATE_ADD('1998-01-30', INTERVAL 1 MONTH);...
  • 函数

    千次阅读 2011-04-27 23:55:00
    函数
  • mysql常用日期时间/数值函数

    千次阅读 2013-05-16 19:24:54
    author:skate ...1.日期时间函数 时间转化秒函数:time_to_sec mysql> select time_to_sec('01:01:01'); +-------------------------+ | time_to_sec('01:01:01') | +-------------------------+ |
  • Hive内置函数

    千次阅读 2019-06-25 18:02:17
    数学函数 下面表格中的函数为Hive的内置数学函数,大部分当参数为NULL时返回NULL。 返回类型 函数名 描述 bigint round(double a) 返回a经过四舍五入...
  • MySQL:日期和时间函数

    千次阅读 2006-11-05 11:02:00
    最近对MySQL中的时间用的比较多,这里摘引下MySQL手册中的可用于操作时间值的函数。网上可自http://dev.mysql.com/doc/refman/5.1/zh/index.html 或者 http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/上...
  • 日期和时间函数 本章论述了一些可用于操作时间值的函数。关于每个时间和日期类型具有的值域及指定值的有效格式,请参见11.3节,“日期和时间类型”。 下面的例子使用了时间函数。以下询问选择了最近的 30天...
  • MySql函数

    千次阅读 2019-03-25 19:41:49
    @[MySql函数] MySQL 函数 本博客是为了记录和测试MySQL中函数的使用,并且经常更新,方便以后查询使用,如有问题,欢迎指正!! 版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址: MySQL...
  • SQL常用函数

    千次阅读 2016-06-12 14:59:12
    1、SQL 函数 SQL 拥有很多可用于计数和计算的内建函数。 1.1 函数的语法 内建 SQL 函数的语法是: SELECT function(列) FROM 表 1.2 函数的类型 在 SQL 中,基本的函数类型和种类有若干种。函数的...
  • 使用的oracle数据库,clxxbh这个字段是varchar2类型的字段,不为空,不知道有什么情况会导致这个问题![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/5.gif),求各位大神帮帮忙!...
  • Power BI(十一)Power Pivot常用DAX函数

    千次阅读 2019-03-31 23:30:41
    Power BI(十一)Power Pivot常用DAX函数 主要提及以下的函数,用法其实和... 日期和时间函数 转换函数 关系函数 数据的提取和合并函数 数据的格式转换函数 格式规范 说明 ...
  • SQL 函数 汇总 简析

    2017-11-09 14:27:09
    SQL 拥有很多可用于计数和计算的内建函数,,,SQL Aggregate函数SQL Aggreate函数计算从列中取得的值,返回一个单一的值,有用的Aggregate 函数:AVG() – 返回平均值SELECT AVG(数字列1,数字列2...) FROM 表名;...
  • Hive常用函数用法

    千次阅读 2020-11-11 18:51:49
    Hive常用函数查看函数用法数学函数集合函数日期函数条件函数字符串函数三级目录 查看函数用法 命令如下: desc function extended FUNC_NAME; 数学函数 集合函数 日期函数 条件函数 字符串函数 三级目录 ...
  • Hive2.1函数列表

    千次阅读 2018-06-07 10:32:34
    函数 运算符 函数 自带函数 用户自定义函数
  • python常用函数总结

    万次阅读 多人点赞 2018-04-23 11:40:49
    普通函数 一、输入输出函数 1、print()函数 输出函数 向屏幕输出指定的汉字 print(&quot;hello world&quot;) print()函数可以同时输出多个字符串,用逗号“,”隔开 print(&quot;hello&...
  • hive函数大全

    千次阅读 2020-07-13 19:31:03
    为了方便开发人员使用函数,Hive提供了大量的内置函数,包括数学函数,类型转换函数,条件函数,字符函数,聚合函数,表生成函数等等,
  • MySQL常用函数大全(总结篇)

    万次阅读 多人点赞 2019-02-19 14:08:33
    本篇文章讲解是是MySQL的函数方法,涵盖所有的MySQL...三、日期函数 四、MySQL高级函数 (一)数字函数 1、ABS(x) 返回x的绝对值 SELECT ABS(-1); ---- 返回1 2、AVG(expression) 返回一个表达式的平均值,expres...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,032
精华内容 13,212
关键字:

函数提取最大日期