ITPub博客

首页 > 数据库 > > Gauss 100 数据库函数介绍之类型转换函数Part1

Gauss 100 数据库函数介绍之类型转换函数Part1

作者:GaussDB_数据库 时间:2020-02-28 14:38:45 0 删除 编辑

类型转换函数

ASCII

语法:

ASCII(str)

功能:返回字符串str首个字符对应的ASCII码。

入参是字符串或单个字符,需要使用单引号('')括起来;返回值是ASCII码。

示例:

返回字符串helloword首个字符(h)对应的ASCII码。
SELECT ASCII('helloword') FROM DUAL;

ASCII('HELLOWORD')
--------------------
104

1 rows fetched.

CAST

语法:

CAST(expr as datatype)

功能:将列名/值转换为指定的数据类型datatype。

表达式可以转换为与自身相同的类型。

使用CAST函数进行数据类型转换时,以下情况可以转换,否则报错:

  • 两个表达式可隐式转换。

  • 必须显式转换数据类型。

示例:

将字符串'10'转换为int类型值。
SQL> SELECT CAST('10' AS INT) FROM DUAL;

CAST('10' AS INT)
-----------------
10

1 rows fetched.

CHAR

语法:

CHAR(n)

功能:返回ASCII码为n的字符。n支持范围为[0,127]。

入参是可转成数值型表达式;返回值是ASCII码为n的字符。

示例:

返回ASCII码为67的字符。
SELECT CHAR(67) FROM DUAL; 

CHAR(67)
--------
C

1 rows fetched.

CHR

语法:

CHR(n)

功能:返回ASCII码为n的字符。n支持范围为[0,127]。

入参是可转成数值型表达式;返回值是ASCII码为n的字符。

示例:

返回ASCII码为67的字符。
SELECT CHR(67) FROM DUAL; 

CHR(67)
-------
C

1 rows fetched.

CONVERT

语法:

CONVERT(expr,data_type)

功能:将expr转换成data_type类型。

data_type取值范围是除了CLOB,BLOB,IMAGE以外的所有数据类型(参考数据类型)。

示例:

将字符串转换为时间类型。
SELECT CONVERT('2018-06-28 13:14:15', timestamp) as datetime FROM DUAL;

DATETIME
---------------------------------------------------------------
2018-06-28 13:14:15.000000

1 rows fetched.

DECODE

语法:

DECODE(expr,{search,result} [,...] [default])

功能:将expr与多个search进行比较,如果expr等于search,则返回对应result;如果没有找到匹配项,则返回default;如果未指定default,则返回空值。可以指定多个search及对应result,用逗号(,)分隔。

入参支持的数据类型是INT、BIGINT、REAL、STRING、NUMBER、DATE、TIMESTAMP、BINARY;返回值是STRING。

示例:

解码表staffS_xian的staff_ID值。
--删除同名表staffS_xian。
DROP TABLE IF EXISTS staffS_xian;
--创建表staffS_xian。
CREATE TABLE staffS_xian
(
staff_ID NUMBER(6) not null,
NAME VARCHAR2(20),
EMAIL VARCHAR2(25),
PHONE_NUMBER VARCHAR2(20),
HIRE_DATE DATE,
employment_ID VARCHAR2(10),
SALARY NUMBER(8,2),
MANAGER_ID NUMBER(6),
section_ID NUMBER(4)
);
--向表staffS_xian中加入记录1。
INSERT INTO staffS_xian (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY, MANAGER_ID, section_ID)
values (198, '王莹', 'wangying@126.com', '18095605632', to_date('21-06-1999', 'dd-mm-yyyy'), 'SH_CLERK', 2600.00, 124, 50);
--向表staffS_xian中加入记录2。
INSERT INTO staffS_xian (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY, MANAGER_ID, section_ID)
values (199, '何开平', 'hekaipng02@126.com', '18095605532', to_date('13-01-2000', 'dd-mm-yyyy'), 'SH_CLERK', 2600.00, 124, 50);
--向表staffS_xian中加入记录3。
INSERT INTO staffS_xian (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY, MANAGER_ID, section_ID)
values (200, '李瑞', 'lirui03@126.com', '18095565632', to_date('17-09-1987', 'dd-mm-yyyy'), 'AD_ASST', 4400.00, 101, 10);
--解码值staff_ID。如果staff_ID为198,则函数返回“A组”;如果staff_ID为199,则返回“B组”。如果staff_ID不是198、199,则函数返回“unknown”。
SELECT staff_ID, DECODE (staff_ID, 198, 'A组', 199, 'B组', 'unknown') "GROUP" FROM staffS_xian WHERE staff_ID < 201 ORDER BY staff_ID;

STAFF_ID GROUP
---------------------------------------- -------
198 A组
199 B组
200 unknown

3 rows fetched.

IF

语法:

IF(cond,exp1,exp2)

功能:计算条件cond,如果条件为真,则返回exp1,否则返回exp2。

示例:

返回员工编号和工资列表,工资如果为NULL则返回secret。
--删除同名表staffS_xian。
DROP TABLE IF EXISTS staffS_xian;
--创建表staffS_xian。
CREATE TABLE staffS_xian
(
staff_ID NUMBER(6) not null,
NAME VARCHAR2(20),
EMAIL VARCHAR2(25),
PHONE_NUMBER VARCHAR2(20),
HIRE_DATE DATE,
employment_ID VARCHAR2(10),
SALARY NUMBER(8,2),
MANAGER_ID NUMBER(6),
section_ID NUMBER(4)
);
--向表staffS_xian中加入记录1。
INSERT INTO staffS_xian (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY, MANAGER_ID, section_ID)
values (198, '王莹', 'wangying@126.com', '18095605632', to_date('21-06-1999', 'dd-mm-yyyy'), 'SH_CLERK', NULL, 124, 50);
--向表staffS_xian中加入记录2。
INSERT INTO staffS_xian (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY, MANAGER_ID, section_ID)
values (199, '何开平', 'hekaipng02@126.com', '18095605532', to_date('13-01-2000', 'dd-mm-yyyy'), 'SH_CLERK', 2600.00, 124, 50);
--向表staffS_xian中加入记录3。
INSERT INTO staffS_xian (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY, MANAGER_ID, section_ID)
values (200, '李瑞', 'lirui03@126.com', '18095565632', to_date('17-09-1987', 'dd-mm-yyyy'), 'AD_ASST', 4400.00, 101, 10);
--向表staffS_xian中加入记录4。
INSERT INTO staffS_xian (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY, MANAGER_ID, section_ID)
values (206, '李锐云', 'liruiyun03@126.com', '18095565892', to_date('17-09-1988', 'dd-mm-yyyy'), 'AD_ASST', 3900.00, 101, 10);
--返回员工编号和工资列表,工资如果为NULL则返回secret。
SELECT staff_ID, IF(SALARY < 4000, SALARY, 'secret') "SALARY" FROM staffS_xian WHERE staff_ID IS NOT NULL ORDER BY staff_ID;

STAFF_ID SALARY
---------------------------------------- ----------------------------------------------------
198 secret
199 2600
200 secret
206 3900

4 rows fetched.

IFNULL

语法:

IFNULL(expr1, expr2)

功能:如果expr1不为NULL,则返回expr1;如果expr1是NULL,则返回expr2。

示例:

返回员工编号和工资列表,工资如果为NULL则返回unknown。
--删除同名表staffS_xian。
DROP TABLE IF EXISTS staffS_xian;
--创建表staffS_xian。
CREATE TABLE staffS_xian
(
staff_ID NUMBER(6) not null,
NAME VARCHAR2(20),
EMAIL VARCHAR2(25),
PHONE_NUMBER VARCHAR2(20),
HIRE_DATE DATE,
employment_ID VARCHAR2(10),
SALARY NUMBER(8,2),
MANAGER_ID NUMBER(6),
section_ID NUMBER(4)
);
--向表staffS_xian中加入记录1。
INSERT INTO staffS_xian (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY, MANAGER_ID, section_ID)
values (198, '王莹', 'wangying@126.com', '18095605632', to_date('21-06-1999', 'dd-mm-yyyy'), 'SH_CLERK', NULL, 124, 50);
--向表staffS_xian中加入记录2。
INSERT INTO staffS_xian (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY, MANAGER_ID, section_ID)
values (199, '何开平', 'hekaipng02@126.com', '18095605532', to_date('13-01-2000', 'dd-mm-yyyy'), 'SH_CLERK', 2600.00, 124, 50);
--向表staffS_xian中加入记录3。
INSERT INTO staffS_xian (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY, MANAGER_ID, section_ID)
values (200, '李瑞', 'lirui03@126.com', '18095565632', to_date('17-09-1987', 'dd-mm-yyyy'), 'AD_ASST', 4400.00, 101, 10);
--返回员工编号和工资列表,工资如果为NULL则返回unknown。
SELECT staff_ID, IFNULL(SALARY, 'unknown') "SALARY" FROM staffS_xian WHERE staff_ID IS NOT NULL ORDER BY staff_ID;

STAFF_ID SALARY
---------------------------------------- ----------------------------------------------------
198 unknown
199 2600
200 4400

3 rows fetched.

NVL

语法:

NVL(expr1, expr2)

功能:如果expr1不为NULL,则返回expr1;如果expr1是NULL,则返回expr2。

示例:

返回员工编号和工资列表,工资如果为NULL则返回0。
--删除同名表staffS_xian。
DROP TABLE IF EXISTS staffS_xian;
--创建表staffS_xian。
CREATE TABLE staffS_xian
(
staff_ID NUMBER(6) not null,
NAME VARCHAR2(20),
EMAIL VARCHAR2(25),
PHONE_NUMBER VARCHAR2(20),
HIRE_DATE DATE,
employment_ID VARCHAR2(10),
SALARY NUMBER(8,2),
MANAGER_ID NUMBER(6),
section_ID NUMBER(4)
);
--向表staffS_xian中加入记录1。
INSERT INTO staffS_xian (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY, MANAGER_ID, section_ID)
values (198, '王莹', 'wangying@126.com', '18095605632', to_date('21-06-1999', 'dd-mm-yyyy'), 'SH_CLERK', NULL, 124, 50);
--向表staffS_xian中加入记录2。
INSERT INTO staffS_xian (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY, MANAGER_ID, section_ID)
values (199, '何开平', 'hekaipng02@126.com', '18095605532', to_date('13-01-2000', 'dd-mm-yyyy'), 'SH_CLERK', 2600.00, 124, 50);
--向表staffS_xian中加入记录3。
INSERT INTO staffS_xian (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY, MANAGER_ID, section_ID)
values (200, '李瑞', 'lirui03@126.com', '18095565632', to_date('17-09-1987', 'dd-mm-yyyy'), 'AD_ASST', 4400.00, 101, 10);
--返回员工编号和工资列表,工资如果为NULL则返回。
SELECT staff_ID, NVL(SALARY,) "SALARY" FROM staffS_xian WHERE staff_ID IS NOT NULL ORDER BY staff_ID;

STAFF_ID SALARY
---------------------------------------- ----------------------------------------
198
199 2600
200 4400

3 rows fetched.


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3162941/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 阈值告警-事件
请登录后发表评论 登录
全部评论

注册时间:2020-01-06

  • 博文量
    2907
  • 访问量
    19275