3.3.2.3. 转换为 Oracle19c

3.3.2.3.1. 时间日期函数

3.3.2.3.1.1. STR_TO_DATE

语法
STR_TO_DATE(date,format)
描述
该函数功能是返回日期。

参数解释

参数

说明

date

指定日期时间,该参数可以为 text 数据类型

format

日期显示格式,该参数为字符串类型,支持清单详见下表

序号

日期时间显示格式

含义

1

%c

月,数值(00-12)

2

%d

月的天,数值(00-31)

3

%e

月的天,数值(00-31)

4

%H

小时 (00-23)

5

%h

小时 (01-12)

6

%I

小时 (01-12)

7

%i

分钟,数值(00-59)

8

%k

小时 (00-23)

9

%l

小时 (01-12)

10

%M

月名

11

%m

月,数值(00-12)

12

%p

AM 或 PM

13

%r

时间,12-小时(hh:mm:ss AM 或 PM)

14

%S

秒(00-59)

15

%s

秒(00-59)

16

%T

时间,24-小时(hh:mm:ss)

17

%W

星期名

18

%Y

年,4位

19

%y

年,2位

警告

  • date的范围需要与format范围一致,例如date精确到秒,那么format也需要精确到秒

  • format的时间格式以转换后Oracle19C的数据库支持为准,’YYYY-MM-MM-DD’与’YYYY-ASD-MM-DD’是不支持的格式

  • mysql二位数的年份在小于70时是高位补充20,大于70时高位补充19,而oracle二位数的年份高位补充的是20

  • 转换后Oracle19C的sql执行结果存在微秒

示例

-- 转换前MySQL SQL:
SELECT STR_TO_DATE('2024-12-31','%Y-%m-%d %T') FROM DUAL;
+-----------------------------------------+
| STR_TO_DATE('2024-12-31','%Y-%m-%d %T') |
+-----------------------------------------+
| 2024-12-31 00:00:00                     |
+-----------------------------------------+


SELECT STR_TO_DATE('70-12-31','%y-%m-%d %T') FROM DUAL;
+---------------------------------------+
| STR_TO_DATE('70-12-31','%y-%m-%d %T') |
+---------------------------------------+
| 1970-12-31 00:00:00                   |
+---------------------------------------+



-- 转换后Oracle19C SQL:
SELECT to_date('2024-12-31', 'YY-MM-DD HH24:MI:SS') FROM dual;
TO_DATE('2024-12-31','YY-MM-DDHH24:MI:SS')|
------------------------------------------+
                   2024-12-31 00:00:00.000|


SELECT to_date('70-12-31', 'YYYY-MM-DD HH24:MI:SS') FROM dual;
TO_DATE('70-12-31','YY-MM-DDHH24:MI:SS')|
----------------------------------------+
                 2070-12-31 00:00:00.000|

3.3.2.3.1.2. TIME_FORMAT

语法
TIME_FORMAT(date,format)
描述
该函数功能是返回字符串。

参数解释

参数

说明

time

指定日期。该参数可以为 timestamp 数据类型

format

日期显示格式,支持清单详见STR_TO_DATE一节

警告

  • format的时间格式不允许出现其它字符。’YYYY-ASD-MM-DD’是不支持的格式

示例

-- 转换前MySQL SQL:
SELECT TIME_FORMAT(SYSDATE(), '%Y-%m-%d %T') FROM dual;
+----------------------------------------+
| TIME_FORMAT(SYSDATE() , '%Y-%m-%d %T') |
+----------------------------------------+
| 0000-00-00 13:14:09                    |
+----------------------------------------+



-- 转换后Oracle19C SQL:
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS')|
---------------------------------------+
2025-03-28 15:07:40                    |

3.3.2.3.2. 条件函数

3.3.2.3.2.1. IF

语法
IF (expr1, expr2, expr3)
描述
如果第一个参数为TRUE,则返回第二个参数,否则返回第三个参数。

参数解释

参数

说明

expr1

判断该参数是否为true

expr2

如果expr1为true,则返回expr2

expr3

如果expr1不为true,则返回expr3

警告

  • MySQL 中,null和空字符串不相等,而 Oracle 19c 中,null和空字符串相等都是null。

  • Oracle 19c 中null相关表达式操作会返回null

  • expr1中null相关表达式操作会返回null

  • Oracle 19c 类型转换规则方面与 MySQL 不同,expr2 与 expr3 必须是相同的类型,否则会报错 ORA-00932: 数据类型不一致 ; 如 select if (1 > 2, 1, '假') 是不支持的

示例

-- 转换前MySQL SQL:
SELECT IF(1 > 2, 2, 3);
IF(1 > 2, 2, 3)|
---------------+
              3|

SELECT IF(1, 2, 3);
IF(1, 2, 3)|
-----------+
          2|

SELECT IF('123', 2, 3);
IF('123', 2, 3)|
---------------+
              2|

-- 转换后 Oracle 19c SQL:
SELECT case when 1>2 then 2 else 3 end from dual;
CASEWHEN1>2THEN2ELSE3END|
--+
3|

SELECT case when unisql.is_nonzero(1) != 0 then 2 else 3 end from dual;
CASEWHENUNISQL.IS_NONZERO(1)!=0THEN2ELSE3END|
--+
2|

SELECT case when unisql.is_nonzero('123') != 0 then 2 else 3 end from dual;
CASEWHENUNISQL.IS_NONZERO('123')!=0THEN2ELSE3END|
--+
2|

3.3.2.3.2.2. IFNULL

语法
IFNULL (anycompatible1, anycompatible2)
描述
根据参数是否为空,返回相应的值。

参数解释

参数

说明

anycompatible1

判断该参数是否为null,如果不为null,则返回该参数

anycompatible2

判断第一个参数是否为null,如果为null,则返回该参数

警告

  • 由于Oracle19C中无法区分空串与NULL,所以在Oracle19C中,只能将’’与NULL一视同仁来处理

示例

-- 转换前MySQL SQL:
SELECT ifnull(1, 15) FROM dual;
+---------------+
| ifnull(1, 15) |
+---------------+
|             1 |
+---------------+


select ifnull(null, 15) FROM dual;
+------------------+
| ifnull(null, 15) |
+------------------+
|               15 |
+------------------+


select ifnull('', 15) FROM dual;
+----------------+
| ifnull('', 15) |
+----------------+
|                |
+----------------+


-- 转换后Oracle19C SQL:
SELECT nvl(1, 15) FROM dual;
NVL(1,15)|
---------+
        1|


SELECT nvl(NULL, 15) FROM dual;
NVL(NULL,15)|
------------+
          15|


SELECT nvl('', 15) FROM dual;
NVL('',15)|
----------+
15        |

3.3.2.3.2.3. ISNULL

语法
ISNULL (anycompatible)
描述
判断是否为null,为null则返回1,非null返回0

参数解释

参数

说明

anycompatible

判断该参数是否为null

警告

  • 由于Oracle19C中无法区分空串与NULL,所以在Oracle19C中,只能将’’与NULL一视同仁来处理

示例

create table t1(id text);
insert into t1 values(123), (null), ('a');

-- 转换前MySQL SQL:
select isnull(1) FROM dual;
+-----------+
| isnull(1) |
+-----------+
|         0 |
+-----------+



select isnull(null) FROM dual;
+--------------+
| isnull(null) |
+--------------+
|            1 |
+--------------+



select isnull('') FROM dual;
+------------+
| isnull('') |
+------------+
|          0 |
+------------+


-- 转换后Oracle19C SQL:
SELECT CASE WHEN 1 IS NULL THEN 1 ELSE 0 END FROM dual;
CASEWHEN1ISNULLTHEN1ELSE0END|
----------------------------+
                           0|


SELECT CASE WHEN null IS NULL THEN 1 ELSE 0 END FROM dual;
CASEWHENNULLISNULLTHEN1ELSE0END|
-------------------------------+
                              1|


SELECT CASE WHEN '' IS NULL THEN 1 ELSE 0 END FROM dual;
CASEWHEN''ISNULLTHEN1ELSE0END|
-----------------------------+
                            1|

3.3.2.3.3. 字符串函数

3.3.2.3.3.1. FIND_IN_SET

语法
FIND_IN_SET (str, strlist)
描述
返回一个字符串 str 在另一个由逗号隔开的字符串 strlist 中第一次出现的位置。

参数解释

参数

说明

str

需要查找的字符串,不能包含逗号,包含逗号则该函数无法正常工作

strlist

字符串清单,是一个以逗号分隔的字符串

警告

  • MySQL 中,null和空字符串不相等,而oracle19c中,null和空字符串相等都是null;所以无法实现在 strlist 中寻找空串的功能。

  • 只要 str 或 strlist 为 null 或空串,函数就会返回 NULL

  • 大小写处理方面,MySQL 是根据数据库或列的字符集来决定是否区分大小写的;而 Oracle 19c 中,本函数 区分大小写

  • 入参仅支持字符串类型,以及可以隐式转换成字符串的类型如 NUMBER

  • 如果您的表中含义一个定长的 CHAR(n) 列,且内容未达到 n 长度,则最后一项的匹配会有差异!比如 FIND_IN_SET('5', char_col) ,char_col 为 ‘1,2,3,4,5’ ,但 char_col 类型的长度超过 9,则在 MySQL 中可以匹配返回 5 , 但在 Oracle 中会返回 0 ,因为字符串会视为 ‘1,2,3,4,5 ‘ (带有空格补全)

示例

-- 转换前MySQL SQL:
SELECT FIND_IN_SET('橙子', '苹果,香蕉,橙子') from dual;
FIND_IN_SET('橙子', '苹果,香蕉,橙子')|
-----------------------------+
                            3|

SELECT FIND_IN_SET('  apple  ', '  apple  ,  banana  ,  orange  ') from dual;
FIND_IN_SET('  apple  ', '  apple  ,  banana  ,  orange  ')|
-----------------------------------------------------------+
                                                          1|

-- 转换后 Oracle 19c SQL:
SELECT FIND_IN_SET('橙子', '苹果,香蕉,橙子') from dual;
UNISQL.FIND_IN_SET('橙子','苹果,香蕉,橙子')|
-----------------------------------+
                                  3|

SELECT FIND_IN_SET('  apple  ', '  apple  ,  banana  ,  orange  ') from dual;
UNISQL.FIND_IN_SET('APPLE','APPLE,BANANA,ORANGE')|
-------------------------------------------------+
                                                1|

3.3.2.3.3.2. SUBSTRING_INDEX

语法
SUBSTRING_INDEX (str, delimiter, count)
描述
根据指定的分隔符 delimiter 和计数 count,从字符串 str 中提取子字符串。 若 count 为正数,则返回从字符串开头到第 count 个分隔符的所有内容; 若 count 为负数,则返回从字符串末尾到第 count 个分隔符的所有内容。

参数解释

参数

说明

str

要处理的原始字符串

delimiter

用于分割字符串的分隔符,必须为字符串类型

count

整数,指定分隔符的计数。正数表示从开头计数,负数表示从末尾计数

警告

  • MySQL 中,null和空字符串不相等,而oracle19c中,null和空字符串相等,都为null;若 strdelimitercount 为 null,则函数会返回 NULL。

  • 本函数 区分大小写

  • 入参仅支持字符串类型,以及可以隐式转换成字符串的类型如 NUMBER

  • 如果您的表中含有一个定长的 CHAR(n) 列,且内容未达到 n 长度,则最后一项的匹配会有差异。 比如 SUBSTRING_INDEX(char_col, ‘,’, 2)char_col 为 ‘1,2,3’ ,但 char_col 类型的长度超过 5,则在 MySQL 中可以正常提取子字符串, 而在 Oracle 中由于字符串会视为 ‘1,2,3 ‘ (带有空格补全),可能会出现提取结果不一致的情况

示例

-- 转换前MySQL SQL:
SELECT SUBSTRING_INDEX('www.example.com', '.', 2) from dual;
SUBSTRING_INDEX('www.example.com', '.', 2)|
-----------------------------------------+
                           www.example|

SELECT SUBSTRING_INDEX('www.example.com', '.', -2) from dual;
SUBSTRING_INDEX('www.example.com', '.', -2)|
------------------------------------------+
                          example.com|

-- 转换后 Oracle 19c SQL:
SELECT UNISQL.SUBSTRING_INDEX('www.example.com', '.', 2) from dual;
UNISQL.SUBSTRING_INDEX('www.example.com', '.', 2)|
-----------------------------------------------+
                           www.example|

SELECT UNISQL.SUBSTRING_INDEX('www.example.com', '.', -2) from dual;
UNISQL.SUBSTRING_INDEX('www.example.com', '.', -2)|
-----------------------------------------------+
                          example.com|

3.3.2.3.3.3. LOCATE

语法
LOCATE (substr, str [, position])
描述
返回子字符串第一次出现的位置。

参数解释

参数

说明

substr

需要查找的字串,该参数为字符串类型

str

需要被查找的父串,该参数为字符串类型

position

从父串中指定位置开始查找子串(初始值为1),该参数为整形类型,可选参数,不填时默认从父串启示位置开始查找子串

警告

  • 由于Oracle19C中无法区分空串与NULL,所以在Oracle19C中只能将’’与NULL一视同仁来处理

  • Mysql根据排序规则可以设置区分大小写,而oracle不行,所以转换后的函数大小写敏感

示例

-- 转换前MySQL SQL:
SELECT LOCATE('bar', 'foobarbar', 5) FROM dual;
+-------------------------------+
| LOCATE('bar', 'foobarbar', 5) |
+-------------------------------+
|                             7 |
+-------------------------------+

SELECT LOCATE('bar', 'foobarbar', 1) FROM dual;
+-------------------------------+
| LOCATE('Bar', 'foobarbar', 1) |
+-------------------------------+
|                             4 |
+-------------------------------+


SELECT LOCATE('Bar', 'foobarbar', 1) FROM dual;
+-------------------------------+
| LOCATE('Bar', 'foobarbar', 1) |
+-------------------------------+
|                             4 |
+-------------------------------+


SELECT LOCATE('', 'foobarbar', 1) FROM dual;
+----------------------------+
| LOCATE('', 'foobarbar', 1) |
+----------------------------+
|                          1 |
+----------------------------+


SELECT LOCATE(NULL, 'foobarbar', 1) FROM dual;
+------------------------------+
| LOCATE(NULL, 'foobarbar', 1) |
+------------------------------+
|                         NULL |
+------------------------------+


-- 转换后Oracle19C SQL:
SELECT instr('foobarbar', 'bar', 5) FROM dual;
INSTR('FOOBARBAR','BAR',5)|
--------------------------+
                         7|


SELECT instr('foobarbar', 'bar', 1) FROM dual;
INSTR('FOOBARBAR','BAR',1)|
--------------------------+
                         4|


SELECT instr('foobarbar', 'Bar', 1) FROM dual;
INSTR('FOOBARBAR','BAR',1)|
--------------------------+
                         0|


SELECT instr('foobarbar', NULL, 1) FROM dual;
INSTR('FOOBARBAR',NULL,1)|
-------------------------+
                         |


SELECT instr('foobarbar', '', 1) FROM dual;
INSTR('FOOBARBAR','',1)|
-----------------------+
                       |

3.3.2.3.3.4. CAST

语法
CAST (expr AS type)
描述
将expr转换为指定的数据类型。

参数解释

参数

说明

expr

需要被转换类型的值。

type

指定转换的类型,signed,unsigned,decimal,douoble,date,char

警告

  • 使用CAST将值转为unsinged,值必须是正整形、正整形字符串和正浮点型,且其值小于等于2^64 - 1; 不支持负值

  • oracle的CAST函数转换成signed,unsigned类型时会四舍五入

  • mysql的char转换成varchar2(4000),mysql的char的长度是字符长度,而oracle的varchar2是字节长度。char对应数据的字节长度超过4000不支持

示例

-- 转换前MySQL SQL:
SELECT cast('312' as SIGNED) from dual;
+-----------------------+
| cast('312' as SIGNED) |
+-----------------------+
|                   312 |
+-----------------------+


SELECT cast(0.55 as UNSIGNED) from dual;
+------------------------+
| cast(0.55 as UNSIGNED) |
+------------------------+
|                      1 |
+------------------------+


SELECT cast('hello' as CHAR) from dual;
+-----------------------+
| cast('hello' as CHAR) |
+-----------------------+
| hello                 |
+-----------------------+



-- 转换后Oracle19C SQL:
SELECT CAST('312' AS number(20,0)) FROM dual;
CAST('312'ASNUMBER(20,0))|
-------------------------+
                      312|


SELECT CAST(0.55 AS number(20,0)) FROM dual;
CAST(0.55ASNUMBER(20,0))|
------------------------+
                       1|


SELECT CAST('hello' AS varchar2(4000)) FROM dual;
CAST('HELLO'ASVARCHAR2(4000))|
-----------------------------+
hello                        |

3.3.2.3.3.5. CONCAT

语法
CONCAT (str1, str2, ...)
描述
将入参字符串拼接在一起。

参数解释

参数

说明

str

需要拼接的字符串,该参数为字符串数据类型

警告

  • 由于Oracle19C中无法区分空串与NULL,所以在Oracle19C中,只能将’’与NULL一视同仁来处理

  • MySQL的函数参数如果有NULL则会返回NULL,而oracle不会

示例

-- 转换前MySQL SQL:
select concat('123', 'abcAA', 'nihao') from dual;
+---------------------------------+
| concat('123', 'abcAA', 'nihao') |
+---------------------------------+
| 123abcAAnihao                   |
+---------------------------------+


select concat('123', '', 'nihao') from dual;
+----------------------------+
| concat('123', '', 'nihao') |
+----------------------------+
| 123nihao                   |
+----------------------------+



select concat('123', NULL, 'nihao') from dual;
+------------------------------+
| concat('123', NULL, 'nihao') |
+------------------------------+
| NULL                         |
+------------------------------+



select concat('123abc') from dual;
+------------------+
| concat('123abc') |
+------------------+
| 123abc           |
+------------------+


-- 转换后Oracle19C SQL:
SELECT concat(concat('123', 'abcAA'), 'nihao') FROM dual;
CONCAT(CONCAT('123','ABCAA'),'NIHAO')|
-------------------------------------+
123abcAAnihao                        |


SELECT concat(concat('123', ''), 'nihao') FROM dual;
CONCAT(CONCAT('123',''),'NIHAO')|
--------------------------------+
123nihao                        |


SELECT concat(concat('123', NULL), 'nihao') FROM dual;
CONCAT(CONCAT('123',NULL),'NIHAO')|
----------------------------------+
123nihao                          |


SELECT concat('123abc', '') FROM dual;
CONCAT('123ABC','')|
-------------------+
123abc             |

3.3.2.3.3.6. GROUP_CONCAT

语法
GROUP_CONCAT ([DISTINCT] column_name… [ORDER BY ASC/DESC column_name] [Separator sep_str])
描述
将来自多个行的列值组合成一个单独的字符串,每个值之间可以用分隔符隔开。

参数解释

参数

说明

column_name

需要拼接的字符串列,该参数为字符串数据类型

sep_str

分割标识符

警告

  • GROUP_CONCAT函数与listagg函数拼接顺序不完全一致

  • 暂时不支持和keep、over联合使用和聚合函数使用时不支持嵌套使用

  • GROUP BY分组顺序存在不一致的情况

示例

 CREATE TABLE sales (
 id int,
 product VARCHAR(50),
 quantity INT,
 sale_date varchar(50)
 );

 INSERT INTO sales VALUES (4, 'Apple', 10, '2023-01-15');
 INSERT INTO sales VALUES (4, 'Banana', 5, '2023-01-20');
 INSERT INTO sales VALUES (1, 'Orange', 8, '2023-02-01');
 INSERT INTO sales VALUES (1, 'Grape', 12, '2023-01-10');
 INSERT INTO sales VALUES (3, 'Apple', 3, '2023-03-01');


 -- 转换前MySQL SQL:
 SELECT id, GROUP_CONCAT( product  ORDER BY id SEPARATOR ',') AS products FROM sales GROUP BY id;
 id|products    |
 --+------------+
  1|Grape,Orange|
  3|Apple       |
  4|Banana,Apple|

 SELECT id, GROUP_CONCAT( product  SEPARATOR ',') AS products FROM sales GROUP BY id;
 id|products    |
 --+------------+
  1|Orange,Grape|
  3|Apple       |
  4|Apple,Banana|

 SELECT id, GROUP_CONCAT(DISTINCT product  SEPARATOR ',') AS products FROM sales GROUP BY id;
id|products    |
--+------------+
 1|Grape,Orange|
 3|Apple       |
 4|Apple,Banana|


 -- 转换后Oracle19C SQL:
 SELECT id,listagg(product, ',') WITHIN GROUP (ORDER BY id) AS products FROM sales GROUP BY id;
 ID|PRODUCTS    |
 --+------------+
  1|Grape,Orange|
  3|Apple       |
  4|Apple,Banana|


 SELECT id,listagg(product, ',') AS products FROM sales GROUP BY id;
 ID|PRODUCTS    |
 --+------------+
 1|Orange,Grape|
 4|Apple,Banana|
 3|Apple       |


  SELECT id,listagg(DISTINCT product, ',') AS products FROM sales GROUP BY id;
  ID|PRODUCTS    |
 --+------------+
  1|Grape,Orange|
  3|Apple       |
  4|Apple,Banana|

3.3.2.3.3.7. CHAR_LENGTH

语法
CHAR_LENGTH (str)
描述
计算字符串的长度

参数解释

参数

说明

str

需要计算长度的字符串,该参数为字符串数据类型

警告

  • 由于Oracle19C中无法区分空串与NULL,所以在Oracle19C中,只能将’’与NULL一视同仁来处理

示例

 -- 转换前MySQL SQL:
 SELECT char_length('zhangsan') FROM dual;
 +-------------------------+
 | char_length('zhangsan') |
 +-------------------------+
 |                       8 |
 +-------------------------+


 SELECT char_length(NULL) FROM dual;
 +-------------------+
 | char_length(NULL) |
 +-------------------+
 |              NULL |
 +-------------------+


 SELECT char_length('') FROM dual;
 +-----------------+
 | char_length('') |
 +-----------------+
 |               0 |
 +-----------------+


 -- 转换后Oracle19C SQL:
 SELECT length('zhangsan') FROM dual;
 LENGTH('ZHANGSAN')|
 ------------------+
                  8|


SELECT length(NULL) FROM dual;
LENGTH(NULL)|
------------+
            |


SELECT length('') FROM dual;
LENGTH('')|
----------+
          |

3.3.2.3.3.8. CONCAT_WS

语法
CONCAT_WS (separator, str1, str2, ...)
描述
将入参字符串与字符串分隔符拼接在一起

参数解释

参数

说明

separator

用于分割每个字符串的分隔符

str

需要拼接的字符串,该参数为字符串数据类型

警告

  • 由于Oracle19C中无法区分空串与NULL,所以在Oracle19C中,只能将’’与NULL一视同仁来处理

  • Mysql遇到了NULL不会使用连接符,而Oracle19C会使用连接符

示例

CREATE TABLE TEST_CONCATWS (school varchar(96),name varchar(96));
INSERT INTO TEST_CONCATWS VALUES ('hensheng','ZHANGSAN');
INSERT INTO TEST_CONCATWS VALUES ('hafuo','LISI');
INSERT INTO TEST_CONCATWS VALUES (NULL,'WANGWU');

-- 转换前MySQL SQL:
SELECT CONCAT_WS(':',school, name) FROM TEST_CONCATWS;
+-----------------------------+
| CONCAT_WS(':',school, name) |
+-----------------------------+
| hensheng:ZHANGSAN           |
| hafuo:LISI                  |
| WANGWU                      |
+-----------------------------+


-- 转换后Oracle19C SQL:
SELECT concat(concat(school, ':'), name) FROM TEST_CONCATWS;
CONCAT(CONCAT(SCHOOL,':'),NAME)|
-------------------------------+
hensheng:ZHANGSAN              |
hafuo:LISI                     |
:WANGWU                        |

3.3.2.3.3.9. LEFT

语法
LEFT (str, length)
描述
截取指定长度的字符串

参数解释

参数

说明

str

被截取的源字符串,该参数为字符串数据类型

length

需要截取的字符串长度,该参数为数值类型

示例

-- 转换前MySQL SQL:
SELECT  LEFT('nihao', 2) FROM dual;
+------------------+
| LEFT('nihao', 2) |
+------------------+
| ni               |
+------------------+




-- 转换后Oracle19C SQL:
SUBSTR('NIHAO',1,2)|
-------------------+
ni                 |

3.3.2.3.4. 其它函数

3.3.2.3.4.1. STDDEV

语法
STDDEV (expr)
描述
计算一组数值的标准差

参数解释

参数

说明

expr

用与就算标准差的数值列,或者表达式

警告

  • 计算标准差时,Oracle19C数据库stddev_pop函数计算的标准差精度大于Mysql数据库函数stddev函数计算的标准差

示例

CREATE TABLE TEST_STDDEV (id int,value int,value_double double);
INSERT INTO TEST_STDDEV VALUES (1,10,10.0);
INSERT INTO TEST_STDDEV VALUES (1,20,20.0);
INSERT INTO TEST_STDDEV VALUES (1,30,30.0);

-- 转换前MySQL SQL:
SELECT stddev(value), stddev(value_double) FROM TEST_STDDEV;
stddev(value)   |stddev(value_double)|
----------------+--------------------+
8.16496580927726|    8.16496580927726|


-- 转换后Oracle19C SQL:
SELECT stddev_pop(value), stddev_pop(value_double) FROM TEST_STDDEV;
STDDEV_POP(VALUE)                       |STDDEV_POP(VALUE_DOUBLE)|
----------------------------------------+------------------------+
8.16496580927726032732428024901963797322|        8.16496580927726|

3.3.2.3.4.2. TRUNCATE

语法
TRUNCATE (number, decimal_places)
描述
用于截取指定的位数

参数解释

参数

说明

number

被截取的目标数值

decimal_places

为正时,表示截取的小数位数;为负时表示截取整数的位数

示例

CREATE TABLE TEST_STDDEV (id int,value int,value_double double);
INSERT INTO TEST_STDDEV VALUES (1,10,10.0);
INSERT INTO TEST_STDDEV VALUES (1,20,20.0);
INSERT INTO TEST_STDDEV VALUES (1,30,30.0);

-- 转换前MySQL SQL:
SELECT TRUNCATE(123.456, -2) FROM dual;
+-----------------------+
| TRUNCATE(123.456, -2) |
+-----------------------+
|                   100 |
+-----------------------+


SELECT TRUNCATE(123.456, 0) FROM dual;
+----------------------+
| TRUNCATE(123.456, 0) |
+----------------------+
|                  123 |
+----------------------+


SELECT TRUNCATE(123.456, 2) FROM dual;
+----------------------+
| TRUNCATE(123.456, 2) |
+----------------------+
|               123.45 |
+----------------------+


-- 转换后Oracle19C SQL:
SELECT TRUNC(123.456, -2) FROM dual;
TRUNC(123.456,-2)|
-----------------+
              100|


SELECT TRUNC(123.456, 0) FROM dual;
TRUNC(123.456,0)|
----------------+
             123|


SELECT TRUNC(123.456, 2) FROM dual;
TRUNC(123.456,2)|
----------------+
          123.45|

3.3.2.3.4.3. DATABASE

语法
DATABASE ()
描述
获取数据库名称

示例

-- 转换前MySQL SQL:
SELECT DATABASE() FROM dual;
+------------+
| DATABASE() |
+------------+
| mysql      |
+------------+


-- 转换后Oracle19C SQL:
SELECT sys_context('userenv', 'DB_NAME') FROM dual;
SYS_CONTEXT('USERENV','DB_NAME')|
--------------------------------+
test                            |

3.3.2.3.4.4. SCHEMA

语法
SCHEMA ()
描述
获取数据库名称

示例

-- 转换前MySQL SQL:
SELECT SCHEMA() FROM dual;
+----------+
| SCHEMA() |
+----------+
| mysql    |
+----------+


-- 转换后Oracle19C SQL:
SELECT sys_context('userenv', 'DB_NAME') FROM dual;
SYS_CONTEXT('USERENV','DB_NAME')|
--------------------------------+
test                            |