精华内容
下载资源
问答
  • Excel函数应用之数据库函数

    千次阅读 2007-12-07 22:07:00
    编者语:在Microsoft Excel 中包含了一些工作表函数,它们用于对存储在数据清单或数据库中的数据进行分析,这些函数统称为数据库函数Dfunctions。一、函数的共同特点这一类函数具有一些共同特点:(1)每个函数均有...

     编者语:
    在Microsoft Excel 中包含了一些工作表函数,它们用于对存储在数据清单或数据库中的数据进行分析,这些函数统称为数据库函数Dfunctions。

    一、函数的共同特点

    这一类函数具有一些共同特点:

    (1)每个函数均有三个参数:database、field 和 criteria。这些参数指向函数所使用的工作表区域。

    (2)除了GETPIVOTDATA函数之外,其余十二个函数都以字母D开头。

    (3)如果将字母D去掉,可以发现其实大多数数据库函数已经在Excel的其他类型函数中出现过了。比如,DAVERAGE将D去掉的话,就是求平均值的函数AVERAGE。

    二、数据库函数列表

    在Excel包含的数据库函数及其应用为:

     
    图1

    三、数据库函数的参数含义

    Excel函数精彩回顾
    Excel函数应用之函数简介
    Excel函数应用之数学和三角函数
    Excel函数应用之逻辑函数
    Excel函数应用之文本/日期/时间函数
    Excel函数应用之查询与引用函数
    Excel函数应用之统计函数
    Excel函数应用之工程函数
    Excel函数应用之财务函数
    Excel函数应用之信息函数

    由于数据库函数具有相同的三个参数,因此笔者将首先介绍一下该类函数的几个参数。然后再以具体示例来说明数据库函数的应用方法。

    该类函数的语法形式为 函数名称(database,field,criteria)。

    Database为构成数据清单或数据库的单元格区域。数据库是包含一组相关数据的数据清单,其中包含相关信息的行为记录,而包含数据的列为字段。数据清单的第一行包含着每一列的标志项。

    Field为指定函数所使用的数据列。数据清单中的数据列必须在第一行具有标志项。Field 可以是文本,即两端带引号的标志项,如“使用年数”或“产量”;此外,Field 也可以是代表数据清单中数据列位置的数字:1 表示第一列,2 表示第二列,等等。

    Criteria为一组包含给定条件的单元格区域。可以为参数 criteria 指定任意区域,只要它至少包含一个列标志和列标志下方用于设定条件的单元格。

    四、举例说明

    1、例:某果园的果树的高度、使用年数、产量与利润的统计数据表如图所示,

     
    图2

    希望求出

    (1) 有多少种苹果树的树高在10~16英尺之间

    (2) 苹果树与梨树的最大利润值是多少

    (3) 高度大于 10 英尺的苹果树的最小利润是多少

    (4) 苹果树的总利润

    (5) 高度大于 10 英尺的苹果树的平均产量

    (6) 果园中所有树种的平均使用年数

    (7) 求苹果树和梨树产量的估算标准偏差、真实标准偏差、估算方差、真实方差。

    2、求解步骤

    (1) 创建空白工作簿或工作表,将数据录入Excel中

     
    图3

    (2) 由于第一问需要求解有多少种苹果树的树高在10~16英尺之间,因此建立查询条件高度在10与16之间

     
    图4

    (3) 利用函数DCOUNT求解满足条件的单元格数来计算高度在10~16英尺的苹果树的种类。公式为:DCOUNT(A4:E10,"使用年数",B1:G2),求出有一种苹果树满足条件。

    (4) 由于第二问为求苹果树与梨树的最大利润值,因此再建立一个查询条件——梨树,如图。

     
    图5

    (5) 利用函数DMAX求出苹果树与梨树的最大利润,同理可以利用函数DMIN求出高度大于10英尺苹果树的最小利润。具体公式为:

    =DMAX(A4:E10,"利润",A1:A3) 求出苹果树与梨树的最大利润为105

    =DMIN(A4:E10,"利润",A1:B2) 求出高度大于10英尺苹果树的最小利润为75

    (6) 利用函数DSUM可以求出所有苹果树的总利润。

     公式为:=DSUM(A4:E10,"利润",A1:A2) 总利润为225

    (7) 其他各问均可采用类似的函数求解,详细的公式如图所示。

     
    图6

    五、需要注意的地方

    1、可以为参数 criteria 指定任意区域,只要它至少包含一个列标志和列标志下方用于设定条件的单元格。

    例如,如果区域 A1:A2 在 A1 中包含列标志“树种”,在A2中包含名称苹果树,可将此区域命名为苹果树树种,那么在数据库函数中就可使用该名称作为参数 criteria。

    2、虽然条件区域可以在工作表的任意位置,但不要将条件区域置于数据清单的下方。因为如果使用“数据”菜单中的“记录单”命令在数据清单中添加信息,新的信息将被添加在数据清单下方的第一行上。如果数据清单下方的行非空,Microsoft Excel 将无法添加新的信息。

    3、确定条件区域没有与数据清单相重叠。

    4、若要对数据库的整个列进行操作,需要在条件区域中的列标志下方输入一个空白行。

    六、关于条件的建立

    在上面的示例中,我们简单介绍了条件区域的建立,在这里详细介绍有关在Excel中利用高级条件进行数据筛选的方法。

    1、 有关概念

    条件是指所指定的限制查询或筛选的结果集中包含哪些记录的条件。例如,上面示例中条件选择“高度”字段的值大于10的记录:高度>10。

    清单是指包含相关数据的一系列工作表行,例如,发票数据库或一组客户名称和电话号码。清单的第一行具有列标志。

    2、 建立条件区域的基本要求

    (1)在可用作条件区域的数据清单上插入至少三个空白行。

    (2)条件区域必须具有列标志。

    (3)请确保在条件值与数据清单之间至少留了一个空白行。

    如在上面的示例中A1:F3就是一个条件区域,其中第一行为列标志,如树种、高度。

    3、 筛选条件的建立

    在列标志下面的一行中,键入所要匹配的条件。所有以该文本开始的项都将被筛选。例如,如果您键入文本“Dav”作为条件,Microsoft Excel 将查找“Davolio”、“David”和“Davis”。如果只匹配指定的文本,可键入公式=''=text'',其中“text”是需要查找的文本。如果要查找某些字符相同但其他字符不一定相同的文本值,则可使用通配符。Excel中支持的通配符为:

     
    图7

    4、 几种不同条件的建立

    (1)单列上具有多个条件

    如果对于某一列具有两个或多个筛选条件,那么可直接在各行中从上到下依次键入各个条件。例如,上面示例的条件区域显示“树种”列中包含“苹果树”或“梨树”的行。

    (2)多列上具有单个条件

    若要在两列或多列中查找满足单个条件的数据,请在条件区域的同一行中输入所有条件。例如,下面示例的条件区域显示所有在“高度”列中大于10且“产量”大于10的数据行。

     
    图8

    (3)某一列或另一列上具有单个条件

    若要找到满足一列条件或另一列条件的数据,请在条件区域的不同行中输入条件。例如,上面示例的条件区域显示所有在“高度”列中大于10的数据行。

    (4)两列上具有两组条件之一

    若要找到满足两组条件(每一组条件都包含针对多列的条件)之一的数据行,请在各行中键入条件。例如,下面的条件区域将显示所有在“树种”列中包含“苹果树”且“高度”大于10的数据行,同时也显示“樱桃树”的“使用年数”大于10年的行。

     
    图9

    (5)一列有两组以上条件

    若要找到满足两组以上条件的行,请用相同的列标包括多列。例如,上面示例的条件区域显示介于10和16之间的高度。

    (6)将公式结果用作条件

    Excel中可以将公式(公式:单元格中的一系列值、单元格引用、名称或运算符的组合,可生成新的值。公式总是以等号 (=) 开始。)的计算结果作为条件使用。用公式创建条件时,不要将列标志作为条件标记使用,应该将条件标记置空,或者使用清单中非列标志的标记。例如,下面的条件区域显示在列 C 中,其值大于单元格区域 C7:C10 平均值的行。=C7>AVERAGE($C$7:$C$10)

    需要注意的是用作条件的公式必须使用相对引用来引用列标志(例如,“高度”),或者引用第一个记录的对应字段。公式中的所有其他引用都必须是绝对引用并且公式必须计算出结果 TRUE 或 FALSE。在本公式示例中,C7 引用了数据清单中第一个记录(行 7)的字段(列 C)。

    当然也可以在公式中使用列标志来代替相对的单元格引用或区域名称。当 Microsoft Excel 在包含条件的单元格中显示错误值 #NAME? 或 #VALUE! 时,您可以忽略这些错误,因为它们不影响列表的筛选。

    此外Microsoft Excel 在计算数据时不区分大小写。

    展开全文
  • MySql数据库函数

    千次阅读 2012-09-16 14:24:52
    MySQL函数集 一、数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP(x) 返回值e(自然对数的底)的x次方 FLOOR(x) 返回...

    MySQL函数集

    一、数学函数
    ABS(x)                    返回x的绝对值
    BIN(x)           返回x的二进制(OCT返回八进制,HEX返回十六进制)
    CEILING(x)                返回大于x的最小整数值
    EXP(x)           返回值e(自然对数的底)的x次方
    FLOOR(x)         返回小于x的最大整数值
    GREATEST(x1,x2,...,xn)  返回集合中最 大的值
    LEAST(x1,x2,...,xn)       返回集合中最小的值
    LN(x)                     返回x的自然对数
    LOG(x,y)          返回x的以y为底的对数
    MOD(x,y)                  返回x/y的模(余数)
    PI()           返回pi的值(圆周率)
    RAND()          返回0到1内的随机值,可以 通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
    ROUND(x,y)        返回参数x的四舍五入的有y位小数的值
    SIGN(x)          返回代表数字x的符号的值
    SQRT(x)          返回一个数的平方根
    TRUNCATE(x,y)             返回数字x截短为y位小数的结果

     

    二、聚合函数(常用于GROUP BY从句的SELECT查询中)
    AVG(col)         返回指定列的平均值
    COUNT(col)        返回指定列中非NULL 值的个数
    MIN(col)          返回指定列的最小值
    MAX(col)         返回指定列的最大值
    SUM(col)         返回指定列的所有值之和
    GROUP_CONCAT(col)     返回由属于一组的列值连接组合而成的结果

     

    三、字符串函数
    ASCII(char)         返回字符的ASCII码值
    BIT_LENGTH(str)      返回字符串的比特长度
    CONCAT(s1,s2...,sn)    将 s1,s2...,sn连接成字符串
    CONCAT_WS(sep,s1,s2...,sn)  将s1,s2...,sn连接成字符串,并用sep字符间隔
    INSERT(str,x,y,instr)    将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果
    FIND_IN_SET(str,list)   分析逗号分隔 的list列表,如果发现str,返回str在list中的位置
    LCASE(str)或LOWER(str)   返回将字符串str中所有字符改变为小写后的结果
    LEFT(str,x)        返回字符串str中最 左边的x个字符
    LENGTH(s)          返回字符串str中的字符数
    LTRIM(str)         从字符串str中切掉开头的空格
    POSITION(substr,str)    返回子串substr在字符串str中第一次出现的位置
    QUOTE(str)         用反斜杠转义str中的单引号
    REPEAT(str,srchstr,rplcstr)返回字 符串str重复x次的结果
    REVERSE(str)         返回颠倒字符串str的结果
    RIGHT(str,x)        返回字符串str中最右边的x个字符
    RTRIM(str)         返回字符串str尾部的空格
    STRCMP(s1,s2)        比较字符串s1和s2
    TRIM(str)         去除字符串首部和尾部的所有空格
    UCASE(str)或UPPER(str)   返回将字符串str中所有字符转变为大写后的结果

     

    四、日期和时间函数
    CURDATE()或CURRENT_DATE()         返回当前的日期
    CURTIME()或CURRENT_TIME()         返回当前的时间
    DATE_ADD(date,INTERVAL int keyword)    返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),如:SELECT DATE_ADD(CURRENT_DATE,INTERVAL 6 MONTH);
    DATE_FORMAT(date,fmt)            依照指定的fmt格式格式化日期date值
    DATE_SUB(date,INTERVAL int keyword)    返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),如:SELECT DATE_SUB(CURRENT_DATE,INTERVAL 6 MONTH);
    DAYOFWEEK(date)                返回date所代表的一星期中的第几天(1~7)
    DAYOFMONTH(date)               返回date是一个月的第几天(1~31)
    DAYOFYEAR(date)                返回date是一年的第几天(1~366)
    DAYNAME(date)                 返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);
    FROM_UNIXTIME(ts,fmt)            根据指定的fmt格式,格式化UNIX时间戳ts
    HOUR(time)                  返回time的小时值(0~23)
    MINUTE(time)                 返回time的分钟值(0~59)
    MONTH(date)                  返回date的月份值(1~12)
    MONTHNAME(date)                返回date的月份名,如:SELECT MONTHNAME(CURRENT_DATE);
    NOW()                     返回当前的日期和时间
    QUARTER(date)                 返回date在一年中的季度(1~4),如SELECT QUARTER(CURRENT_DATE);
    WEEK(date)                  返回日期date为一年中第几周(0~53)
    YEAR(date)                  返回日期date的年份(1000~9999)

    一些示例:
    获取当前系统时间:SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
    SELECT EXTRACT(YEAR_MONTH FROM CURRENT_DATE);
    SELECT EXTRACT(DAY_SECOND FROM CURRENT_DATE);
    SELECT EXTRACT(HOUR_MINUTE FROM CURRENT_DATE);
    返回两个日期值之间的差值(月数):SELECT PERIOD_DIFF(200302,199802);
    在Mysql中计算年龄:
    SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age FROM employee;
    这 样,如果Brithday是未来的年月日的话,计算结果为0。
    下面的SQL语句计算员工的绝对年龄,即当Birthday是未来的日期时,将得到负值。
    SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birthday, '00-%m-%d')) AS age from employee

     

     

    说明符

    说明

    %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位 数)

    %%

    ‘%’文字字符

     

     

    五、加密函数
    AES_ENCRYPT(str,key)     返回用密钥key对字符串str利用高级加密标准算法加密后的结果,调用AES_ENCRYPT的结果是一个二进制字符串,以BLOB类型存储
    AES_DECRYPT(str,key)     返回用密钥key对字符串str利用高级加密标准算法解密后的结果
    DECODE(str,key)        使用key作为密钥解密加密字符串str
    ENCRYPT(str,salt)       使用UNIX crypt()函数,用关键词salt(一个可以惟一确定口令的字符串,就像钥匙一样)加密字符串str
    ENCODE(str,key)        使用key作为密钥加密字符串str,调用ENCODE()的结果是一个二进制字符串,它以BLOB类型存储
    MD5()              计算字符串str的MD5校验和
    PASSWORD(str)         返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX密码加密过程使用不同的算法。
    SHA()              计算字符串str的安全散列算法(SHA)校验和

    示例:
    SELECT ENCRYPT('root','salt');
    SELECT ENCODE('xufeng','key');
    SELECT DECODE(ENCODE('xufeng','key'),'key');#加解密放在一起
    SELECT AES_ENCRYPT('root','key');
    SELECT AES_DECRYPT(AES_ENCRYPT('root','key'),'key');
    SELECT MD5('123456');
    SELECT SHA('123456');

     

    六、控制流函数
    MySQL 有4个函数是用来进行条件操作的,这些函数可以实现SQL的条件逻辑,允许开发者将一些应用程序业务逻辑转换到数据库后台。

    MySQL控制流函数:
    CASE WHEN[test1] THEN [result1]...ELSE [default] END 如果testN是真,则返回resultN,否则返回default
    CASE [test] WHEN[val1] THEN [result]...ELSE [default] END   如果test和valN相等,则返回resultN,否则返回default
    IF(test,t,f)   如果test是真,返回t;否则返回 f
    IFNULL(arg1,arg2) 如果arg1不是空,返回arg1,否则返回arg2
    NULLIF(arg1,arg2) 如果arg1=arg2返回NULL;否则返回arg1

    这些函数的第一个是IFNULL(),它有两 个参数,并且对第一个参数进行判断。如果第一个参数不是NULL,函数就会向调用者返回第一个参数;如果是NULL,将返回第二个参数。
    如:SELECT IFNULL(1,2), IFNULL(NULL,10), IFNULL(4*NULL,'false');

    NULLIF()函数将会检验提供的两个参数 是否相等,如果相等,则返回NULL,如果不相等,就返回第一个参数。
    如:SELECT NULLIF(1,1),NULLIF('A','B'),NULLIF(2+3,4+1);

    和许多脚本语言提供的IF()函数一 样,MySQL的IF()函数也可以建立一个简单的条件测试,这个函数有三个参数,第一个是要被判断的表达式,如果表达式为真,IF()将会返回第二个参 数,如果为假,IF()将会返回第三个参数。
    如:SELECT IF(1<10,2,3),IF(56>100,'true','false');

    IF()函数在只有两种可能结果时才适合使 用。然而,在现实世界中,我们可能发现在条件测试中会需要多个分支。在这种情况下,MySQL提供了CASE函数,它和PHP及Perl语言的 switch-case条件例程一样。
    CASE函数的格式有些复杂,通常如下所示:
    CASE [expression to be evaluated]
    WHEN [val 1] THEN [result 1]
    WHEN [val 2] THEN [result 2]
    WHEN [val 3] THEN [result 3]
    ......
    WHEN [val n] THEN [result n]
    ELSE [default result]
    END
    这里,第一个参数是要被判断的值或表达式,接下来的是一系列的 WHEN-THEN块,每一块的第一个参数指定要比较的值,如果为真,就返回结果。所有的 WHEN-THEN块将以ELSE块结束,当END结束了所有外部的CASE块时,如果前面的每一个块都不匹配就会返回ELSE块指定的默认结果。如果没 有指定ELSE块,而且所有的WHEN-THEN比较都不是真,MySQL将会返回NULL。
    CASE函数还有另外一种句法,有时使用起来非常方便,如下:
    CASE
    WHEN [conditional test 1] THEN [result 1]
    WHEN [conditional test 2] THEN [result 2]
    ELSE [default result]
    END
    这种条件下,返回的结果取决于相应的条件测试是否为真。
    示例:
    mysql>SELECT CASE 'green'
          WHEN 'red' THEN 'stop'
          WHEN 'green' THEN 'go' END;

    SELECT CASE 9 WHEN 1 THEN 'a' WHEN 2 THEN 'b' ELSE 'N/A' END;
    SELECT CASE WHEN (2+2)=4 THEN 'OK' WHEN (2+2)<>4 THEN 'not OK' END AS STATUS;
    SELECT Name,IF((IsActive = 1),'已激活','未激活') AS RESULT FROM UserLoginInfo;
    SELECT fname,lname,(math+sci+lit) AS total,
    CASE WHEN (math+sci+lit) < 50 THEN 'D'
    WHEN (math+sci+lit) BETWEEN 50 AND 150 THEN 'C'
    WHEN (math+sci+lit) BETWEEN 151 AND 250 THEN 'B'
    ELSE 'A' END
    AS grade FROM marks;

    SELECT IF(ENCRYPT('sue','ts')=upass,'allow','deny') AS LoginResult FROM users WHERE uname = 'sue';#一个登陆验证

     

    七、格式化函数
    DATE_FORMAT(date,fmt)    依照字符串fmt格式化日期date值
    FORMAT(x,y)         把x格式化为以逗号隔开的数字序列,y是结果的小数位数
    INET_ATON(ip)        返回IP地址的数字表示
    INET_NTOA(num)        返回数字所代表的IP地址
    TIME_FORMAT(time,fmt)    依照字符串fmt格式化时间time值
    其中最简单的是FORMAT()函数,它可以把大的数值格式化为以逗号间隔的易读的序列。
    示例:
    SELECT FORMAT(34234.34323432,3);
    SELECT DATE_FORMAT(NOW(),'%W,%D %M %Y %r');
    SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');
    SELECT DATE_FORMAT(19990330,'%Y-%m-%d');
    SELECT DATE_FORMAT(NOW(),'%h:%i %p');
    SELECT INET_ATON('10.122.89.47');
    SELECT INET_NTOA(175790383);

     

    八、类型转化函数
    为了进行数据类型转化,MySQL提供了CAST()函数,它可以把一个值转化为指定的数据类型。类型 有:BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED
    示例:
    SELECT CAST(NOW() AS SIGNED INTEGER),CURDATE()+0;
    SELECT 'f'=BINARY 'F','f'=CAST('F' AS BINARY);

     

    九、系统信息函数
    DATABASE()          返回当前数据库名
    BENCHMARK(count,expr)    将表达式expr重复运行count次
    CONNECTION_ID()        返回当前客户的连接ID
    FOUND_ROWS()         返回最后一个SELECT查询进行检索的总行数
    USER()或SYSTEM_USER()    返回当前登陆用户名
    VERSION()           返回MySQL服务器的版本
    示 例:
    SELECT DATABASE(),VERSION(),USER();
    SELECT BENCHMARK(9999999,LOG(RAND()*PI()));#该例中,MySQL计算LOG(RAND()*PI())表达式 9999999次。

    展开全文
  • 摘要: 阿里云函数计算是一个事件驱动的全托管计算... 当微信小程序遇见serverless,他们会产生奇妙火花,利用函数计算可以快速搭建微信小程序的serverle.点此查看原文:http://click.aliyun.com/m/41953/前言这篇文...

    摘要: 阿里云函数计算是一个事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。微信小程序是一种不需要下载安装即可使用的应用,它可以在微信内被便捷地获取和传播。 当微信小程序遇见serverless,他们会产生奇妙火花,利用函数计算可以快速搭建微信小程序的serverle.

    点此查看原文:http://click.aliyun.com/m/41953/

    前言 
    这篇文章适合所有的想微信小程序开发新手、老鸟以及想准备学习开发微信小程序的程序猿。本文以开发一个类似”语音口令红包“小程序为例,向您讲解如何使用阿里云函数计算快速构建微信小程序的服务端。

    demo概览 
    在本教程中,我们讲解如何利用函数计算一步一步来构建微信小程序的server端,其中小程序参考”口令红包”, 实现一个简单版本,该demo中可以展示口令生成,口令转发,口令语音验证。

    微信语音红包小程序是基于微信小程序而开发的语音红包,发起者可以写下想要让别人说的话(口令),并且将钱塞入此红包中,其他用户只要读出这句话(口令)就可以获得红包。语音红包可以发到特定的好友、微信群以及朋友圈,朋友需要根据文字口令说出相应的语音,才能获得红包。这种互动行为,在朋友圈或者微信群社交的场景下,可以极大调动互动活跃度,规则简单方便,体验趣味十足,口令的形式丰富多样(恶搞、示爱、祝贺、说口号、甚至是广告语),这些都让口令红包一直维持很高的热度。

    demo客户端小程序具体效果截图如下:

    生成口令 
    图片描述 
    转发口令 
    图片描述 
    录音验证口令 
    图片描述

    传统服务器架构 VS Serverless架构

    正常来说,除了少数纯客户端的微信小程序运用,绝大部分的小程序都有自己的server端。用户开发server端服务,常常面临开发效率,运维成本高,机器资源弹性伸缩等痛点,而使用Serverless架构可以很好的解决上述问题。下面是传统架构和Serverless架构的对比:

    图片描述

    阿里云函数计算是一个事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询,性能监控,报警等功能。借助于函数计算,您可以快速构建任何类型的应用和服务,无需管理和运维。

    Serverless架构详解

    图片描述
    方案大致如上图所示, 主要分为以下三个模块:

    Login & Auth 
    微信建议登录时序图如下, 其中第三方服务器用FC实现: 
    图片描述

    语音识别(包含音频格式转换) 
    ffmpeg进行音频格式转换 
    百度语言识别开发文档

    方案图下部虚线框柱的是可以拓展的模块,本demo中不展示,用户可以根据需求接入 
    比如微信小程序直接上传文件到oss保存,函数计算可以从oss拉取对应的数据做处理;如果需要数据库功能,可以采用ots

    demo开发配置步骤 
    准备工作: 
    1,开通阿里云账号,同时需要开通的产品有函数计算, api网关

    2,购买独立域名,同时需对域名备案,以及购买阿里云免费ssl证书,购买步骤可参考免费申请阿里云DV SSL证书

    3,开通微信小程序开发认证,以及百度语音识别

    4,从github下载相应的源码,里面client目录表示客户端,server表示用于创建函数。

    FC端 
    1,利用源码中的server目录创建服务端函数,比如函数名为wechatEntry,有以下两种方案创建函数:

    利用控制台打包上传,设置对应的handler, 函数计算控制台使用可参考hello world, 特别是控制台上传代码包创建函数部分。下面是重要步骤截图: 
    图片描述
    图片描述

    函数计算熟悉fcli的工具的老用户可以使用函数计算命令行工具fcli

    fcli function create -f wechatEntry -h main.handler -d server -t python2.7 -s wechat

    注意:上面两种方案创建函数之前都需先把函数中main.py中相关开发配置改成自己申请的,包括微信小程序开发者相关配配置,百度语音识别相关配置

    2, 以函数计算作为 API 网关后端服务

    api网关支持https服务 
    函数计算作为api网关后端服务

    api网关中设置函数对应的api分组配置独立域名 
    图片描述
    最后效果图以及调试界面如下: 
    图片描述
    图片描述
    图片描述

    client端

    按照微信小程序官方教程,创建对应的小程序账号以及工程,需要注意的是要把api网关中配置的域名添加到微信小程序的开发配置中: 
    图片描述
    直接用微信小程序开发工具打开,修改对应请求域名和appid即可,打开如下图所示: 
    图片描述
    图片描述

    总结

    利用函数计算可以快速搭建微信小程序的serverless运用,结合oss,ots可以丰富server的功能,免服务器,免运维,成本低,不用担心流量,只需要函数就可以实现,你值的拥有!

    扫码获取更多资讯:



    展开全文
  • Oracle BIEE EVALUATE系列使用数据库函数

    千次阅读 2015-09-15 13:35:04
    Oracle BIEE11中提供了EVALUATE这个函数,扩展了可以使用oracle函数的功能.  以前看过晃晃悠悠写的EVALUATE的用法。我想补充另外用法。   EVALUATE系列不只有BIEE Admin tool 或者answer中提到的EVALUATE 和 ...
    Oracle BIEE11中提供了EVALUATE这个函数,扩展了可以使用oracle函数的功能. 
    
    以前看过晃晃悠悠写的EVALUATE的用法。我想补充另外用法。 

      EVALUATE系列不只有BIEE Admin tool 或者answer中提到的EVALUATE 和 EVALUATE_AGGR两种函数事实上还有另外的两个 

        EVALUATE: 

        EVALUATE_AGGR: 

        EVALUATE_ANALYTIC: 

        EVALUATE_PREDICATE: 

        这两天在工作中遇到这样一个需求,因为分析数据需要涉及到排序,而且排序的规则不只有一个不是通常的rank()就可以解决,且通常会变,面对这种情况,排序存在数据库中不是很好的办法, 这时候我想起来有一个叫做EVALUATE的函数。 

    通过 EVALUATE 结合oracle数据库中的 rank() over(partion group by ... order...)来实现数据排序。 
    Java代码    收藏代码
    1. EVALUATE ('rank() over (PARTITION BY %1,%2 ORDER BY %3 desc)' as INT, "D1 Time"."Day Of Year Biee","D2 Platform"."Platform",CASE WHEN "F3 Bug Report"."崩溃IP数">0 THEN "F1 Device Useage"."IP数day ver" ELSE 0 END)  


    上面的语句出来了,排序也会按照时间和平台给我排了,但是还遇到一个问题在表格中可以显示排序号正确.但是在出排名曲线图时总时会出现数据显示不出来的情况. 

    接着换成 EVALUATE_ANALYTIC, 
    Java代码    收藏代码
    1. EVALUATE_ANALYTIC ('rank() over (PARTITION BY %1,%2 ORDER BY %3 desc)' as INT, "D1 Time"."Day Of Year Biee","D2 Platform"."Platform",CASE WHEN "F3 Bug Report"."崩溃IP数">0 THEN "F1 Device Useage"."IP数day ver" ELSE 0 END)  

    如表格 


    同时,曲线图可以正常显示了。 


    附: 
    EVALUATE 

    此函数将包含作为参数的可选引用列的指定数据库函数传递给后端数据源,以供求值时使用。此函数专门用于标量计算;当要使用由基础数据源识别但 Oracle BI Server 不支持的专用数据库函数时,此函数会十分有用。 

    嵌入式数据库函数可能需要一个或多个列。这些列将由该函数中的 %1 到 %N 引用。实际列必须列在该函数后面。 

    默认情况下禁用了使用 EVALUATE 的功能。要启用对此函数的支持,请在 NQSConfig.INI 中更改 EVALUATE_SUPPORT_LEVEL 参数。有关详细信息,请参阅 Oracle Fusion Middleware System Administrator's Guide for Oracle Business Intelligence Enterprise Edition。 

    语法 

    EVALUATE('db_function(%1...%N)' [AS data_type] [, column1, columnN]) 

    其中: 

    db_function 是由基础数据源识别的任何有效数据库函数。 

    data_type 是可选参数,它指定返回结果的数据类型。每当无法从输入参数可靠地预测返回数据类型时,就可以使用此参数。但是,请勿使用此参数进行类型转换;如果该函数需要返回特定数据类型,请添加显式转换。如果特定于数据库的函数用于生成不必返回到 Oracle BI Server 的中间结果但该函数的返回类型不受 Oracle BI Server 支持,则通常可以忽略此参数。 

    column1 到 columnN 是可选参数,这是以逗号分隔的列的列表。 

    示例 

    此示例显示嵌入式数据库函数。 

    SELECT EVALUATE('instr(%1, %2)', address, 'Foster City') FROM employees 

    使用 EVALUATE_AGGREGATE 和 EVALUATE 来利用唯一 Essbase 函数的示例 

    以下示例使用了 EVALUATE_AGGREGATE 和 EVALUATE 函数。请注意,这些表达式应用于引用了物理立方的逻辑表源中的列。请使用 EVALUATE_AGGREGATE 实施定制聚合。例如,您可能希望将总体区域利润与区域中排名前三名的产品的利润进行比较。您可以定义新度量来表示前三名产品的利润,从而生成以下逻辑 SQL 语句: 

    SELECT Region, Profit, EVALUATE_AGGREGATE('SUM(TopCount(%1.members, 3, %2), %3)', 
    Products, Profit, Profit) Top_3_prod_Profit FROM SampleBasic 

    Oracle BI Server 为定制聚合生成以下表达式: 

    member [Measures].[MS1] AS 'SUM(Topcount([Product].Generations(6).members,3,[Measures].[Profit]),[Measures].[Profit])' 

    在投影维上使用 EVALUATE 函数以实施聚合后计算的标量函数。如果 EVALUATE 的定义对不在查询中的维 (或属性) 进行了显式引用,则该函数可能会更改查询的粒度。 

    例如,如果您希望查看某个区域中按销售额排名的前 5 个产品的利润,则在创建适用的度量之后,生成的逻辑 SQL 语句如下所示 

    SELECT Region, EVALUATE('TopCount(%1.members, 5, %2)' as VARCHAR(20), Products, Sales), Profits FROM SampleBasic 

    Oracle BI Server 生成以下表达式来检索前 5 个产品: 

    set [Evaluate0] as '{Topcount([Product].Generations(6).members,5,[Measures].[Sales]) }' 

    EVALUATE_ANALYTIC 

    此函数将包含作为参数的可选引用列的指定数据库分析函数传递给后端数据源,以供求值时使用。 

    嵌入式数据库函数可能需要一个或多个列。这些列将由该函数中的 %1 到 %N 引用。实际列必须列在该函数后面。 

    默认情况下禁用了使用 EVALUATE_ANALYTIC 的功能。要启用对此函数的支持,请在 NQSConfig.INI 中更改 EVALUATE_SUPPORT_LEVEL 参数。有关详细信息,请参阅 Oracle Fusion Middleware System Administrator's Guide for Oracle Business Intelligence Enterprise Edition。 

    语法 

    EVALUATE_ANALYTIC('db_function(%1...%N)' [AS data_type] [, column1, columnN]) 

    其中: 

    db_function 是由基础数据源识别的任何有效数据库分析函数。 

    data_type 是可选参数,它指定返回结果的数据类型。每当无法从输入参数可靠地预测返回数据类型时,就可以使用此参数。但是,请勿使用此参数进行类型转换;如果该函数需要返回特定数据类型,请添加显式转换。如果特定于数据库的分析函数用于生成不必返回到 Oracle BI Server 的中间结果但该函数的返回类型不受 Oracle BI Server 支持,则通常可以忽略此参数。 

    column1 到 columnN 是可选参数,这是以逗号分隔的列的列表。 

    示例 

    此示例显示嵌入式数据库分析函数。 

    EVALUATE_ANALYTIC('dense_rank() over(order by %1 )' AS INT,sales.revenue) 

    如果前面的示例需要返回双精度类型,则应添加显式转换,如下所示: 

    CAST(EVALUATE_ANALYTIC('Rank(%1.dimension.currentmember, %2.members)', 
    "Foodmart93"."Time"."Month" as Double) 

    EVALUATE_AGGR 

    此函数将包含作为参数的可选引用列的指定数据库函数传递给后端数据源,以供求值时使用。此函数专门用于带有 GROUP BY 子句的聚合函数。 

    嵌入式数据库函数可能需要一个或多个列。这些列将由该函数中的 %1 到 %N 引用。实际列必须列在该函数后面。 

    默认情况下禁用了使用 EVALUATE_AGGR 的功能。要启用对此函数的支持,请在 NQSConfig.INI 中更改 EVALUATE_SUPPORT_LEVEL 参数。有关详细信息,请参阅 Oracle Fusion Middleware System Administrator's Guide for Oracle Business Intelligence Enterprise Edition。 

    语法 

    EVALUATE_AGGR('db_agg_function(%1...%N)' [AS data_type] [, column1, columnN) 

    其中: 

    db_agg_function 是由基础数据源识别的任何有效聚合数据库函数。 

    data_type 是可选参数,它指定返回结果的数据类型。每当无法从输入参数可靠地预测返回数据类型时,就可以使用此参数。但是,请勿使用此参数进行类型转换;如果该函数需要返回特定数据类型,请添加显式转换。如果特定于数据库的函数用于生成不必返回到 Oracle BI Server 的中间结果但该函数的返回类型不受 Oracle BI Server 支持,则通常可以忽略此参数。 

    column1 到 columnN 是可选参数,这是以逗号分隔的列的列表。 

    示例 

    EVALUATE_AGGR('REGR_SLOPE(%1, %2)', sales.quantity, market.marketkey) 

    EVALUATE_PREDICATE 

    此函数将包含作为参数的可选引用列的指定数据库函数传递给后端数据源,以供求值时使用。此函数专门用于带有布尔返回类型的函数。 

    嵌入式数据库函数可能需要一个或多个列。这些列将由该函数中的 %1 到 %N 引用。实际列必须列在该函数后面。 

    请注意,不支持将 EVALUATE_PREDICATE 用于 Essbase 数据源。 

    默认情况下禁用了使用 EVALUATE_PREDICATE 的功能。要启用对此函数的支持,请在 NQSConfig.INI 中更改 EVALUATE_SUPPORT_LEVEL 参数。有关详细信息,请参阅 Oracle Fusion Middleware System Administrator's Guide for Oracle Business Intelligence Enterprise Edition。 

    语法 

    EVALUATE_PREDICATE('db_function(%1...%N)', [, column1, columnN) 

    其中: 

    db_function 是由基础数据源识别的、具有布尔返回类型的任何有效数据库函数。 

    column1 到 columnN 是可选参数,这是以逗号分隔的列的列表。 

    如果希望对数据库函数建立模型以进行比较,则不应使用 EVALUATE_PREDICATE。请改为使用 EVALUATE 并在函数外部进行比较。例如,不要使用 EVALUATE_PREDICATE,如下所示: 

    EVALUATE_PREDICATE('dense_rank() over (order by 1% ) < 5', sales.revenue) 

    请改为使用 EVALUATE,如下所示: 

    EVALUATE('dense_rank() over (order by 1% ) ', sales.revenue) < 5 

    示例 

    SELECT year, Sales AS DOUBLE,CAST(EVALUATE('OLAP_EXPRESSION(%1,''LAG(units_cube_ 
    sales, 1, time, time LEVELREL time_levelrel)'')', OLAP_CALC) AS DOUBLE) FROM 
    "Global".Time, "Global"."Facts - sales" WHERE EVALUATE_PREDICATE('OLAP_ 
    CONDITION(%1, ''LIMIT time KEEP ''''1'''', ''''2'''', ''''3'''', ''''4'''' '') 
    =1', OLAP_CALC) ORDER BY year;
    展开全文
  • 摘要:C#源码,数据库应用,聚合函数 C#利用聚合函数SUM对销售额进行汇总,数据汇总,使用SQL语句完成。
  • 这个之后我就绞尽脑汁去想,除了拼接sql,之外还有没有其他方法,拙计啊,我苦思冥想了许久之后没有好的思路,然后随便在翻翻oracle函数,突然看到bitand这个函数,头脑灵光一闪,想到了下面这个方法。  在这...
  • 函数依赖和关系模式分解第一范式如何处理非原子值原子性关系数据库设计中易犯的错误模式分解无损连接分解优化关系模式的步骤函数依赖函数依赖定义函数依赖的使用函数依赖集的闭包Armstrong公理Armstrong公理二级定律...
  • 关系数据库理论之最小函数依赖集

    万次阅读 多人点赞 2019-04-06 23:38:53
    在本文中,会介绍为什么要引入最小函数依赖集,最小函数依赖集是什么,以及如何求最小函数依赖集。 为什么需要最小函数依赖集 在关系数据模型中,一个关系通常由R(U,F)构成,U为属性的全集,F为函数依赖集。在实际...
  • SQL Server 计算年龄函数

    千次阅读 2020-06-03 09:39:19
    SQL Server 计算年龄函数需要处理的问题实现思路先将int类型转换...我们就采用创建数据库函数的方式,并且结合表我们和函数结合创建视图,来快速解决相应的需求,解决方案有很多,也许我这种不是性能最优的,我只介绍快
  • Oracle系统函数和select语句
  • 数据库存储过程与存储函数

    千次阅读 2018-12-09 18:49:14
     存储过程是一组为了完成特定功能的SQL语句集,经过编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它,叫做存储过程、存储函数。 2. 存储过程与存储函数的区别  ...
  • Python引入数学函数计算利用Python对Abaqus进行相关编程时经常需要用到数学函数,比如三角函数等,在使用这些函数之前需要先引入数学模块。Import math之后利用时还需要利用层级关系,比如math.pi表示π。一个示例...
  • 存储过程,函数,触发器
  • 如果我们数据库的ID设置为varchar型的 在查询的时候order by id的话 我们是不希望看到如下情况的 我们可以把varchar转换为int 然后进行排序 一、 [sql] select * from yourtable order by cast(yourcol as in...
  • MySQL数据库——汇总数据(聚集函数)

    千次阅读 2017-12-17 00:24:55
    本节介绍什么事SQL的聚集函数以及如何利用他们汇总表的数据。在实际操作中,我们经常需要一些特点数据的,比如: 1.我们常常要确定表中的行数; 2. 获得表中行组的和 ; 3.找出表列(或所有行或某些特定的行)的最大...
  • Postgresql数据库——字符串操作函数

    千次阅读 2018-01-29 16:19:54
    文章来源: ... 一、Postgresql数据库字符串函数 1 函数:string || string  说明:String concatenation 字符串连接操作 例子:select ‘Post’ || ‘greSQL’; = PostgreSQL 2
  • 相关链接: 利用数据库复制技术 实现数据同步更新[摘] SQL 复制过程的注意事项(转) 复制的概念Microsoft? SQL Server? 2000 的复制是在数据库之间对数据和数据库对象进行复制和分发并进行同步以确保其一致性的一组...
  • 计算机三级(数据库)复习重点欢迎阅读我的计算机三级总结第一章 数据库应用系统开发方法第二章 需求分析第三章 数据库结构设计(自底向上)第四章 数据库应用系统功能设计与实现第五章 UML与数据库应用系统第六章 ...
  • 获取集合中的所有待办事项清单:因为有默认 limit 100 条的限制,因此很可能一个请求无法取出所有数据,需要分批次取: 步骤 定义最大条数也就是 下面?...遍历batchTimes 利用skip() 向数据库取对应次...
  • 计算机等级考试四级--数据库原理

    千次阅读 多人点赞 2019-02-15 11:21:34
    全国计算机等级考试四级教程 ——数据库原理(2013版) ...1.1.2 数据库、数据字典、数据库管理系统、数据库系统 - 7 - 1.1.3 数据库系统中的人员 - 8 - 1.2 数据管理技术的产生与发展 - 8 - ...
  • 数据分析之——MySQL数据库之DATE日期函数返回当前时间和日期DATE():提取日期或日期/时间表达式的日期部分EXTRACT() 函数:用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。DATE_A
  • 计算机三级数据库技术复习资料总结

    千次阅读 多人点赞 2020-10-25 18:38:00
    第7章 数据库数据库对象 一、创建及维护数据库 1、两大类: 系统数据库 (自动创建和维护的): master:最重要的数据库,记录所有系统级信息,主要的信息都是存放在这。 msdb:保存报警、作业、操作员等信息。...
  • 全国计算机三级数据库技术

    千次阅读 多人点赞 2020-02-22 15:42:31
    全国计算机等级考试三级(数据库技术) 一:考试内容及要求 1.掌握数据库技术的基本概念、原理、方法和技术 2.能够使用SQL语言实现数据库操作 3.具备数据库系统安装、配置及数据库管理和维护的基本 4.掌握数据库管理...
  • 计算机三级(数据库)备考题目知识点总结

    千次阅读 多人点赞 2019-04-20 13:06:45
    计算机三级(数据库)备考题目知识点总结刷题所遇到的知识点总结考后总结 刷题所遇到的知识点总结 以下都是我在刷题时遇到的常考的知识点,供复习时做参考。 1.DBAS需求分析阶段的一项重要工作是分析DBAS应具有的...
  • 数据库管理系统提供了数据定义语言(DDL),用于定义各种数据库对象。数据定义语句经DDL编译器编译后,各种对象的描述信息存放在数据库的【数据字典】中。 关系数据库中要求关系的主码不能为空,这属于数据模型三...
  • 有这样一个场景:数据库还款计划表有到期还款日字段,正常是每月2日。但这个字段有些是每月1日,现需要统一改成2日,可以用到DATE_ADD函数,但是执行时需要注意:只能执行一次
  • 数据库MySQL详解

    万次阅读 多人点赞 2018-07-24 20:03:47
    13.2.4 计算日期之间相隔的天数 13.3 字符函数 13.4 条件函数 13.4.1 简单条件判断 13.4.2 复杂条件判断 13.5 自定义函数 13.5.1 创建函数 13.5.2 查看函数 13.5.3 修改函数&删除函数 13.5.4 函数参数 13.5.5 作用...
  • 计算机三级-数据库技术

    万次阅读 多人点赞 2019-03-30 10:30:54
    三级数据库技术知识点总结 1 数据字典是对系统种各类数据描述的集合,包括数据项,数据结构,数据流,数据存储和处理过程五个部分 2 数据模型的三要素:数据结构、数据操作和完整性约束 3 数据库系统:一般由数据库...
  • nodejs对数据库的操作是比较简单的。下面看一个对laughter库操作: 这是项目文件结构图: config.js的配置如下: //数据库配置文件 module.exports = { mysql: { host : 'localhost', user : ...
  • 在mysql中存储过程和函数的区别 存储过程:procedure 概念类似于函数,就是把一段代码封装起来, 当要执行这一段代码的时候,可以通过调用该存储过程来实现 在封装的语句体里面,可以用if/else,case,while等...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 219,854
精华内容 87,941
关键字:

利用数据库函数计算