MySQL存储过程详解

mysql存款和储蓄进度详整

1.      储存进度简要介绍

 

大家常用的操作数据库语言SQL语句在进行的时候须要要先编写翻译,然后试行,而存储进度(Stored
Procedure)是豆蔻梢头组为了实现一定功效的SQL语句集,经编写翻译后存款和储蓄在数据库中,客商通过点名存款和储蓄进度的名字并加以参数(若是该存款和储蓄进度带有参数)来调用试行它。

多个仓库储存进程是一个可编制程序的函数,它在数据库中创建并保存。它能够有SQL语句和部分特种的调整构造组成。当希望在分化的应用程序或平台上试行同样的函数,大概封装特定功用时,存款和储蓄进程是不行管用的。数据库中的存储进度能够充任是对编程中面向对象方法的模拟。它同意调节数据的拜谒形式。

仓储进程日常有以下优点:

(1卡塔尔.存款和储蓄进度加强了SQL语言的效应和灵活性。存款和储蓄进程可以用流动调查整语句编写,有很强的眼观四处,能够产生复杂的论断和较复杂的演算。

(2卡塔尔国.存款和储蓄进程允许标准组件是编制程序。存款和储蓄进程被创立后,能够在前后相继中被频仍调用,而毋庸再度编写该存储进度的SQL语句。并且数据库专门的工作职员能够任何时候对存款和储蓄进程进展更换,对选拔程序源代码毫无影响。

(3卡塔尔国.存款和储蓄进度能兑现超快的实施进程。假诺某生机勃勃操作包罗多量的Transaction-SQL代码或个别被每每施行,那么存款和储蓄进程要比批管理的实践进程快超多。因为存款和储蓄过程是预编写翻译的。在首回运营四个仓库储存进程时查询,优化器对其开展剖判优化,並且付诸最后被储存在系统表中的执行布署。而批管理的Transaction-SQL语句在历次运营时都要扩充编译和优化,速度必定要慢一些。

(4卡塔尔(英语:State of Qatar).存款和储蓄进度能过减弱网络流量。针对同三个数据库对象的操作(如查询、改过),尽管那少年老成操作所涉及的Transaction-SQL语句被公司程存款和储蓄进程,那么当在顾客Computer上调用该存款和储蓄进程时,互连网中传递的只是该调用讲话,进而大大扩展了网络流量并收缩了互联网负载。

(5卡塔尔(قطر‎.存款和储蓄进度可被用作意气风发种安全机制来充裕利用。系统助理馆员通超过实际行某生龙活虎储存进度的权限进行约束,能够贯彻对相应的数据的拜望权限的界定,幸免了非授权顾客对数据的访问,保障了数量的池州。

 

2.      至于MySQL的存款和储蓄进程

存款和储蓄进程是数据仓库储存款和储蓄的三个重视的效益,不过MySQL在5.0在先并不援救存款和储蓄进度,那使得MySQL在动用上海高校优惠扣。辛亏MySQL 5.0到底在此之前已经支撑存款和储蓄进程,那样即能够大大进步数据库的管理速度,同时也能够拉长数据库编制程序的狡滑。

3.      MySQL**积存进程的创办**

 

(1). 格式

MySQL存款和储蓄进度创造的格式:CREATE
PROCEDURE 过程名 ([进程参数[,…]])
[特性 …] 过程体

这里先比如:
   

  1. mysql> DELIMITER //  
  2. mysql> CREATE PROCEDURE proc1(OUT s int)  
  3.     -> BEGIN 
  4.     -> SELECT COUNT(*) INTO s FROM user;  
  5.     -> END 
  6.     -> //  
  7. mysql> DELIMITER ; 

 

注:

(1)这里需求小心的是DELIMITEWrangler //和DELIMITETucson ;两句,DELIMITE猎豹CS6是分割符的意趣,因为MySQL私下认可以”;”为分隔符,假若大家从没申明分割符,那么编译器会把仓库储存进度当成SQL语句举行拍卖,则存储进度的编写翻译进度会报错,所以要优先用DELIMITER关键字评释当前段分隔符,那样MySQL才会将”;”当作存款和储蓄进度中的代码,不会实践这个代码,用完了后头要把分隔符还原。

(2)存款和储蓄进程依据需求可能会有输入、输出、输入输出参数,这里有八个输出参数s,类型是int型,借使有多少个参数用”,”分割开。

(3)进程体的启幕与停止使用BEGIN与END实行标识。

如此那般,大家的一个MySQL存储进程就瓜熟蒂落了,是或不是相当的轻松啊?看不懂也没提到,接下去,大家详细的助教。

 

(2). 宣称分割符

 

实际上,关于注脚分割符,上边的讲明已经写得很明白,无需多说,只是微微要小心一点的是:若是是用MySQL的Administrator管理工科具时,能够直接创制,不再要求表明。

 

(3). 参数

MySQL存款和储蓄进度的参数用在仓库储存进度的概念,共有二种参数类型,IN,OUT,INOUT,格局如:

CREATE PROCEDURE([[IN |OUT
|INOUT ] 参数名 数据类形…])

IN 输入参数:意味着该参数的值务必在调用存款和储蓄进程时钦点,在蕴藏进度中期维改善该参数的值无法被再次来到,为暗许值

OUT 输出参数:该值可在积攒进度之中被更改,并可回到

INOUT 输入输出参数:调用时钦定,并且可被退换和重返

Ⅰ. IN参数例子

创建:

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE demo_in_parameter(IN p_in int)  
  3. -> BEGIN   
  4. -> SELECT p_in;   
  5. -> SET p_in=2;   
  6. -> SELECT p_in;   
  7. -> END;   
  8. -> //  
  9. mysql > DELIMITER ; 

奉行结果:

  1. mysql > SET @p_in=1;  
  2. mysql > CALL demo_in_parameter(@p_in);  
  3. +——+  
  4. | p_in |  
  5. +——+  
  6. |   1  |   
  7. +——+  
  8.  
  9. +——+  
  10. | p_in |  
  11. +——+  
  12. |   2  |   
  13. +——+  
  14.  
  15. mysql> SELECT @p_in;  
  16. +——-+  
  17. | @p_in |  
  18. +——-+  
  19. |  1    |  
  20. +——-+  

以上能够看来,p_in纵然在蕴藏进度中被校订,但并不影响@p_id的值

 

Ⅱ.OUT参数例子

创建:

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE demo_out_parameter(OUT p_out int)  
  3. -> BEGIN 
  4. -> SELECT p_out;  
  5. -> SET p_out=2;  
  6. -> SELECT p_out;  
  7. -> END;  
  8. -> //  
  9. mysql > DELIMITER ; 

试行结果:

  1. mysql > SET @p_out=1;  
  2. mysql > CALL sp_demo_out_parameter(@p_out);  
  3. +——-+  
  4. | p_out |   
  5. +——-+  
  6. | NULL  |   
  7. +——-+  
  8.  
  9. +——-+  
  10. | p_out |  
  11. +——-+  
  12. |   2   |   
  13. +——-+  
  14.  
  15. mysql> SELECT @p_out;  
  16. +——-+  
  17. | p_out |  
  18. +——-+  
  19. |   2   |  
  20. +——-+  

Ⅲ. INOUT参数例子

创建:

  1. mysql > DELIMITER //   
  2. mysql > CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int)
      
  3. -> BEGIN 
  4. -> SELECT p_inout;  
  5. -> SET p_inout=2;  
  6. -> SELECT p_inout;   
  7. -> END;  
  8. -> //   
  9. mysql > DELIMITER ; 

 

 

实践结果:

  1. mysql > SET @p_inout=1;
     
  2. mysql > CALL demo_inout_parameter(@p_inout) ;  
  3. +———+  
  4. | p_inout |  
  5. +———+  
  6. |    1    |  
  7. +———+  
  8.  
  9. +———+  
  10. | p_inout |   
  11. +———+  
  12. |    2    |  
  13. +———+  
  14.  
  15. mysql > SELECT @p_inout;  
  16. +———-+  
  17. | @p_inout |   
  18. +———-+  
  19. |    2     |  
  20. +———-+ 

 

(4). 变量

Ⅰ. 变量定义

DECLARE
variable_name [,variable_name…] datatype [DEFAULT value];

内部,datatype为MySQL的数据类型,如:int, float, date,
varchar(length卡塔尔

例如:

  1. DECLARE l_int int unsigned default 4000000;  
  2. DECLARE l_numeric number(8,2) DEFAULT 9.95;  
  3. DECLARE l_date date DEFAULT ‘1999-12-31’;  
  4. DECLARE l_datetime datetime DEFAULT ‘1999-12-31 23:59:59’;  
  5. DECLARE l_varchar varchar(255) DEFAULT ‘This will not be padded’;   

 

 

Ⅱ. 变量赋值

 SET 变量名 = 表明式值 [,variable_name = expression
…]

 

Ⅲ. 客商变量

 

ⅰ. 在MySQL客户端接收客户变量

  1. mysql > SELECT ‘Hello World’ into @x;  
  2. mysql > SELECT @x;  
  3. +————-+  
  4. |   @x        |  
  5. +————-+  
  6. | Hello World |  
  7. +————-+  
  8. mysql > SET @y=’Goodbye Cruel World’;  
  9. mysql > SELECT @y;  
  10. +———————+  
  11. |     @y              |  
  12. +———————+  
  13. | Goodbye Cruel World |  
  14. +———————+  
  15.  
  16. mysql > SET @z=1+2+3;  
  17. mysql > SELECT @z;  
  18. +——+  
  19. | @z   |  
  20. +——+  
  21. |  6   |  
  22. +——+  

ⅱ. 在蕴藏进程中采纳顾客变量

  1. mysql > CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,’ World’);
     
  2. mysql > SET @greeting=’Hello’;  
  3. mysql > CALL GreetWorld( );  
  4. +—————————-+  
  5. | CONCAT(@greeting,’ World’) |  
  6. +—————————-+  
  7. |  Hello World               |  
  8. +—————————-+  

 

ⅲ. 在存款和储蓄过程间传递全局范围的客商变量

  1. mysql> CREATE PROCEDURE p1()   SET @last_procedure=’p1′;  
  2. mysql> CREATE PROCEDURE p2() SELECT CONCAT(‘Last procedure was ‘,@last_proc);
     
  3. mysql> CALL p1( );  
  4. mysql> CALL p2( );  
  5. +———————————————–+  
  6. | CONCAT(‘Last procedure was ‘,@last_proc  |  
  7. +———————————————–+  
  8. | Last procedure was p1                         |  
  9. +———————————————–+  

 

 

注意:

①客商变量名平时以@开首

②滥用客户变量会招致程序难以驾驭及管理

 

(5). 注释

 

MySQL存款和储蓄进程可应用三种风格的注释

双模杠:–

该风Gray同用来单行注释

c风格: 日常用来多行注释

例如:

 

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc1 –name存款和储蓄进度名  
  3. -> (IN parameter1 INTEGER)   
  4. -> BEGIN   
  5. -> DECLARE variable1 CHAR(10);   
  6. -> IF parameter1 = 17 THEN   
  7. -> SET variable1 = ‘birds’;   
  8. -> ELSE 
  9. -> SET variable1 = ‘beasts’;   
  10. -> END IF;   
  11. -> INSERT INTO table1 VALUES (variable1);  
  12. -> END   
  13. -> //  
  14. mysql > DELIMITER ;  

 

4.      MySQL**仓库储存进程的调用**

用call和你进程名以致三个括号,括号里面依照需求,参预参数,参数包蕴输入参数、输出参数、输入输出参数。具体的调用方法能够参照上边的例子。

5.      MySQL**储存进程的询问**

我们像知道一个数据库下边有那个表,大家平常接受show
tables;实行查看。那么大家要翻看某些数据库上边包车型客车积攒进程,是还是不是也足以运用呢?答案是,大家得以查看某些数据库下边的仓储进程,可是是令少年老成钟方式。

大家能够用

select name from mysql.proc
where db=’数据库名’;

或者

select routine_name from
information_schema.routines where routine_schema=’数据库名’;

或者

show procedure status where
db=’数据库名’;

进展查询。

若果大家想领会,某些存款和储蓄进度的详细,那我们又该怎么办呢?是或不是也足以像操作表相近用describe 表名进行查看呢?

答案是:我们能够查阅存款和储蓄进度的事必躬亲,可是急需用另生机勃勃种格局:

SHOW CREATE
PROCEDURE 数据库.存款和储蓄进程名;

就足以查看当前囤积进程的详尽。

 

6.      MySQL**存款和储蓄进程的改良**

ALTER PROCEDURE

改善用CREATE
PROCEDURE 创设的预先钦命的储存进度,其不会潜移默化相关存款和储蓄进程或存款和储蓄成效。

 

7.      MySQL**存款和储蓄进度的删减**

删除二个囤积进度比较轻松,和删除表雷同:

DROP
PROCEDURE

从MySQL的报表中删去一个或多少个存款和储蓄进度。

 

8.      MySQL**积攒进度的主宰语句**

(1). 变量成效域

个中的变量在其功用域范围内拥有更加高的优先权,当实践到end。变量时,内部变量消失,那时候曾在其遵守域外,变量不再可以知道了,应该为在存款和储蓄
进程外再也不能够找到那些发明的变量,可是你能够由此out参数或然将其值支使
给会话变量来保存其值。

 

 

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc3()  
  3.      -> begin 
  4.      -> declare x1 varchar(5) default ‘outer’;  
  5.      -> begin 
  6.      -> declare x1 varchar(5) default ‘inner’;  
  7.      -> select x1;  
  8.      -> end;  
  9.      -> select x1;  
  10.      -> end;  
  11.      -> //  
  12. mysql > DELIMITER ;  

 

 (2). 标准语句

Ⅰ. if-then -else语句

 

 

 

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc2(IN parameter int)  
  3.      -> begin 
  4.      -> declare var int;  
  5.      -> set var=parameter+1;  
  6.      -> if var=0 then 
  7.      -> insert into t values(17);  
  8.      -> end if;  
  9.      -> if parameter=0 then 
  10.      -> update t set s1=s1+1;  
  11.      -> else 
  12.      -> update t set s1=s1+2;  
  13.      -> end if;  
  14.      -> end;  
  15.      -> //  
  16. mysql > DELIMITER ;  

Ⅱ. case语句: 

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc3 (in parameter int)  
  3.      -> begin 
  4.      -> declare var int;  
  5.      -> set var=parameter+1;  
  6.      -> case var  
  7.      -> when 0 then   
  8.      -> insert into t values(17);  
  9.      -> when 1 then   
  10.      -> insert into t values(18);  
  11.      -> else   
  12.      -> insert into t values(19);  
  13.      -> end case;  
  14.      -> end;  
  15.      -> //  
  16. mysql > DELIMITER ; 

 

(3). 循环语句

Ⅰ. while ···· end while:

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc4()  
  3.      -> begin 
  4.      -> declare var int;  
  5.      -> set var=0;  
  6.      -> while var<6 do  
  7.      -> insert into t values(var);  
  8.      -> set var=var+1;  
  9.      -> end while;  
  10.      -> end;  
  11.      -> //  
  12. mysql > DELIMITER ; 

 

 

Ⅱ. repeat···· end repeat:

它在执行操作后检查结果,而while则是实施前开展反省。

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc5 ()  
  3.      -> begin   
  4.      -> declare v int;  
  5.      -> set v=0;  
  6.      -> repeat  
  7.      -> insert into t values(v);  
  8.      -> set v=v+1;  
  9.      -> until v>=5  
  10.      -> end repeat;  
  11.      -> end;  
  12.      -> //  
  13. mysql > DELIMITER ;  

 

Ⅲ. loop ·····end loop:

loop循环没有要求开始标准,那一点和while 循环类似,同不时间和repeat循环相似不须要收尾条件,
leave语句的意义是离开循环。

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc6 ()  
  3. www.350.vip ,     -> begin 
  4.      -> declare v int;  
  5.      -> set v=0;  
  6.      -> LOOP_LABLE:loop  
  7.      -> insert into t values(v);  
  8.      -> set v=v+1;  
  9.      -> if v >=5 then 
  10.      -> leave LOOP_LABLE;  
  11.      -> end if;  
  12.      -> end loop;  
  13.      -> end;  
  14.      -> //  
  15. mysql > DELIMITER ;  

 

 

Ⅳ. LABLES 标号:

标记能够用在begin repeat
while 或然loop 语句前,语句标号只可以在合法的讲话前边使用。能够跳出循环,使运转指令到达复合语句的尾声一步。

 

(4). ITERATE迭代

Ⅰ. ITERATE:

透过援引复合语句的申明,来从新开端复合语句

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc10 ()  
  3.      -> begin 
  4.      -> declare v int;  
  5.      -> set v=0;  
  6.      -> LOOP_LABLE:loop  
  7.      -> if v=3 then   
  8.      -> set v=v+1;  
  9.      -> ITERATE LOOP_LABLE;  
  10.      -> end if;  
  11.      -> insert into t values(v);  
  12.      -> set v=v+1;  
  13.      -> if v>=5 then 
  14.      -> leave LOOP_LABLE;  
  15.      -> end if;  
  16.      -> end loop;  
  17.      -> end;  
  18.      -> //  
  19. mysql > DELIMITER ; 

 

 

9.      MySQL**积累进程的骨干函数**

 

(1卡塔尔(英语:State of Qatar).字符串类

CHA哈弗SET(str卡塔尔//再次来到字串字符集
CONCAT
(string2 [,… ]卡塔尔 //连接字串
INST君越(string ,substring 卡塔尔(英语:State of Qatar) //再次回到substring第三回在string中现身的任务,不设有再次来到0
LCASE (string2 卡塔尔国 //转变来小写
LEFT
(string2 ,length 卡塔尔 //从string第22中学的左侧起取length个字符
LENGTH
(string ) //string长度
LOAD_FILE
(file_name 卡塔尔国 //从文件读取内容
LOCATE
(substring , string [,start_position ] 卡塔尔国 同INSTOdyssey,但可钦定先导地点
LPAD
(string2 ,length ,pad 卡塔尔国 //重复用pad加在string开首,直到字串长度为length
LTENCOREIM (string2 卡塔尔国 //去除前端空格
REPEAT
(string2 ,count ) //重复count次
REPLACE
(str ,search_str ,replace_str ) //在str中用replace_str替换search_str
RPAD (string2 ,length ,pad卡塔尔国 //在str后用pad补充,直到长度为length
RT讴歌RDXIM (string2 卡塔尔(英语:State of Qatar) //去除后端空格
STRCMP
(string1 ,string2 卡塔尔 //逐字符相比两字串大小,
SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符,
注:mysql中管理字符串时,默许第八个字符下标为1,即参数position必需大于等于1 

 

  1. mysql> select substring(‘abcd’,0,2);  
  2. +———————–+  
  3. | substring(‘abcd’,0,2) |  
  4. +———————–+  
  5. |                       |  
  6. +———————–+  
  7. 1 row in set (0.00 sec)  
  8.  
  9. mysql> select substring(‘abcd’,1,2);  
  10. +———————–+  
  11. | substring(‘abcd’,1,2) |  
  12. +———————–+  
  13. |     ab                |  
  14. +———————–+  
  15. 1 row in set (0.02 sec)  

TRIM([[BOTH|LEADING|TRAILING]
[padding] FROM]string2卡塔尔(قطر‎ //去除内定地方的内定字符
UCASE
(string2 卡塔尔 //转变来大写
RIGHT(string2,length)
//取string2最后length个字符
SPACE(count)
//生成count个空格

(2).数学类

ABS (number2 )
//绝对值
BIN
(decimal_number 卡塔尔 //十进制转二进制
CEILING
(number2 卡塔尔 //向上取整
CONV(number2,from_base,to_base卡塔尔(قطر‎//进制转换
FLOO奥德赛(number2 卡塔尔(قطر‎ //向下取整
FORMAT
(number,decimal_places 卡塔尔(英语:State of Qatar) //保留小数位数
HEX
(DecimalNumber 卡塔尔(قطر‎ //转十四进制
注:HEX(卡塔尔国中可传唱字符串,则赶回其ASC-11码,如HEX(‘DEF’卡塔尔(قطر‎重返4142143
也能够流传十进制整数,再次来到其十四进制编码,如HEX(25卡塔尔国再次来到19
LEAST (number , number2 [,..]卡塔尔(英语:State of Qatar) //求最小值
MOD
(numerator ,denominator ) //求余
POWER
(number ,power ) //求指数
RAND([seed])
//随机数
ROUND
(number [,decimals ]卡塔尔(英语:State of Qatar) //四舍五入,decimals为小数位数]

注:再次来到类型而不是均为整数,如:
(1卡塔尔私下认可变为整形值

  1. mysql> select round(1.23);  
  2. +————-+  
  3. | round(1.23) |  
  4. +————-+  
  5. |           1 |  
  6. +————-+  
  7. 1 row in set (0.00 sec)  
  8.  
  9. mysql> select round(1.56);  
  10. +————-+  
  11. | round(1.56) |  
  12. +————-+  
  13. |           2 |  
  14. +————-+  
  15. 1 row in set (0.00 sec) 

(2卡塔尔能够设定小数位数,再次来到浮点型数据

  1. mysql> select round(1.567,2);
     
  2. +—————-+  
  3. | round(1.567,2) |  
  4. +—————-+  
  5. |           1.57 |  
  6. +—————-+  
  7. 1 row in set (0.00 sec) 

SIGN (number2 ) //

 

(3卡塔尔(英语:State of Qatar).日期时间类

ADDTIME (date2 ,time_interval ) //将time_interval加到date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ 卡塔尔国 //转变时区
CURRENT_DATE ( 卡塔尔 //当今日子
CURRENT_TIME ( 卡塔尔(英语:State of Qatar) //当前岁月
CURRENT_TIMESTAMP ( 卡塔尔(英语:State of Qatar) //当前时刻戳
DATE (datetime 卡塔尔 //再次来到datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type 卡塔尔(قطر‎//在date第22中学增添日期或时刻
DATE_FORMAT (datetime ,FormatCodes 卡塔尔国//使用formatcodes格式呈现datetime
DATE_SUB (date2 , INTERVAL d_value d_type 卡塔尔(英语:State of Qatar) //在date2上减去一个时刻
DATEDIFF (date1 ,date2 卡塔尔 //多个日子差
DAY (date 卡塔尔 //再次回到日期的天
DAYNAME (date 卡塔尔国 //匈牙利(Magyarország卡塔尔国语星期
DAYOFWEEK (date 卡塔尔 //星期(1-7卡塔尔(英语:State of Qatar) ,1为周末
DAYOFYEA讴歌RDX (date 卡塔尔(قطر‎ //一年中的第几天
EXTRACT (interval_name FROM date 卡塔尔(قطر‎ //从date中领到日期的钦定部分
MAKEDATE (year ,day 卡塔尔国 //给出年及年中的第几天,生成日期串
MAKETIME (hour ,minute ,second 卡塔尔(英语:State of Qatar) //生成时间串
MONTHNAME (date 卡塔尔国 //希伯来语月份名
NOW ( 卡塔尔(قطر‎ //当前岁月
SEC_TO_TIME (seconds 卡塔尔 //秒数转成时间
STR_TO_DATE (string ,format 卡塔尔(英语:State of Qatar) //字串转成时间,以format格式呈现
TIMEDIFF (datetime1 ,datetime2 卡塔尔(英语:State of Qatar) //多个日子差
TIME_TO_SEC (time 卡塔尔国 //时间转秒数]
WEEK (date_time [,start_of_week ]) //第几周
YEAR (datetime ) //年份
DAYOFMONTH(datetime卡塔尔国 //月的第几天
HOUR(datetime) //小时
LAST_DAY(date卡塔尔(英语:State of Qatar) //date的月的最后日期
MICROSECOND(datetime) //微秒
MONTH(datetime) //月
MINUTE(datetime卡塔尔国 //分重临符号,正负或0
SQRT(number2) //开平方

发表评论

电子邮件地址不会被公开。 必填项已用*标注