数据转换的类型
隐式数据转换与显示数据转换。
隐式数据转换:
VARCHAR2 OR CHAR <-> DATE
VARCHAR2 OR CHAR <-> NUMBER
显示数据转换:
CHRRACTER与DATE: TO_DATE / TO_CHAR
CHRRACTER与NUMBER:TO_NUMBER / TO_CHAR
使用TO_CHAR函数转换日期为字符串
TO_CHAR(Date, ‘Format_Model’)
Format_Model参数内容:
SELECT TO_CHAR(TO_DATE(‘2010-9-3‘,‘YYYY-MM-DD‘), ‘fmDD-MONTH-YYYY‘), --fm让数字显示的日和月都不带前导0, MONTH显示完整的月份信息
TO_CHAR(TO_DATE(‘2010-9-3‘,‘YYYY-MM-DD‘), ‘DD-MON-YYYY‘)FROM dual; --没有fm看开头所以日期带前导0, MON显示缩写的月份信息。
TO_CHAR(TO_DATE( TO_CHAR(TO_
---------------- -----------
3-SEPTEMBER-2010 03-SEP-2010
SELECT TO_CHAR(sysdate, ‘fmDD-MON-YYYY DAY HH24:mi:ss AM‘) FROM dual;
TO_CHAR(SYSDATE,‘FMDD-MON-YYYYDAYHH24:MI:SSAM‘)
---------------------------------------------------------------------
2-MAY-2021 SUNDAY 20:57:4 PM
使用TO_CHAR函数将数字转换为字符串
TO_CHAR(number, ‘Format_Model‘)
Format_Model参数内容:
SELECT TO_CHAR(11000.99, ‘99,999.00‘) AS NUM2CHAR FROM dual; --Format_Model的数字位数不能小于转换的数据 NUM2CHAR ---------- 11,000.99
SELECT TO_CHAR(11000.99, ‘$0099,999.00‘) AS NUM2CHAR FROM dual; --00是不能被省略的。 $表示美元货币单位。
NUM2CHAR
-------------
$0011,000.99
SELECT TO_CHAR(9.99, ‘L9.99‘) FROM dual; --L是中文货币单位,在SQLDeveloper里面显示的是¥9.99
SELECT USERENV(‘LANGUAGE‘) FROM dual; --显示语言信息,货币也是在这里决定的。SQLDeveloper和SQLPLUS的显示会有不同。
TO_NUMBER(STR, [Format_Model]):将字符串转换为数字格式。
SQL> SELECT TO_NUMBER(‘001573‘) FROM dual; TO_NUMBER(‘001573‘) ------------------- 1573
SELECT TO_NUMBER(‘1,000.99‘, ‘9,999.99‘) FROM dual; --带类型格式的转换,数字和类型格式要匹配
TO_NUMBER(‘1,000.99‘,‘9,999.99‘)
--------------------------------
1000.99
TO_DATE(STR, ‘FORMAT_MODEL‘): 将字符串转换为日期类型。
SQL> SELECT TO_DATE(‘2020-FEB-28‘,‘YYYY-MON-DD‘) FROM dual; --根据数据的类型编写适应的Format Model。 TO_DATE(‘2020-FEB-2 ------------------- 2020-02-28 00:00:00
通用函数(与NULL有关系的函数)
NVL(值1, 值2): 将为NULL的值1 替换为 值2, 值2的类型一定要与字段的类型匹配。
SELECT last_name, NVL(commission_pct,0) --将commission_pct字段为NULL的记录替换为0 FROM employees
NVL2(值1, 值2, 值3): 对于值1为空的,转换为值3。 对于值1不为空的,转换为值2.
SELECT commission_pct, NVL2(commission_pct,0,1) FROM employees; COMMISSION_PCT NVL2(COMMISSION_PCT,0,1) -------------- ------------------------ 1 1 .4 0 .3 0 .3 0 .3 0
NULLIF(值1, 值2) 如果值1和值2不同,结果为值1;如果相同,则为NULL。
SELECT last_name, LENGTH(last_name) "EXP1", first_name, LENGTH(first_name) "EXP2", NULLIF(LENGTH(last_name), LENGTH(first_name)) "RESULT" FROM employees; LAST_NAME EXP1 FIRST_NAME EXP2 RESULT ------------------------- ---------- -------------------- ---------- ---------- Cambrault 9 Nanette 7 9 Chen 4 John 4 Chung 5 Kelly 5 Colmenares 10 Karen 5 10 Davies 6 Curtis 6
COALESCE(表达式, 值1):当表达式中有NULL值,则结果为值1,否则结果为表达式的计算结果。
SELECT last_name, salary, commission_pct, COALESCE(salary*(1 + commission_pct), salary+1000) "新工资" FROM employees;