码迷,mamicode.com
首页 > 数据库 > 详细

Oracle系列四 单行函数查询语句

时间:2019-11-03 16:44:28      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:instr   添加   pre   manager   nvl   图片   大小写   其他   tween   

单行函数

  • 操作数据对象
  • 接受参数返回一个结果
  • 只对一行进行变换
  • 每行返回一个结果
  • 可以转换数据类型
  • 可以嵌套
  • 参数可以是一列或一个值

包含:字符,数值,日期,转换,通用


字符函数

1.大小写控制函数:这类函数改变字符的大小写。

LOWER(SQL Course)  sql course
UPPER(SQL Course)  SQL COURSE
INITCAP(SQL Course) Sql Course

示例:

SELECT
    employee_id,
    last_name,
    department_id
FROM
    employees
WHERE
    lower(last_name) = higgins;

技术图片


2.字符控制函数

CONCAT(Hello, World)     HelloWorld
SUBSTR(HelloWorld,1,5)    Hello
LENGTH(HelloWorld)        10
INSTR(HelloWorld, W)    6
LPAD(salary,10,*)        *****24000  //第一个参数是需要处理的字符串,第二个参数是需要将字符串扩充的宽度,第三个参数表示加宽部分用什么字符来做填补,第三个参数的默认值为空格,但也可以是单个的字符或字符串
RPAD(salary, 10, *)        24000*****  //同上
TRIM(H FROM HelloWorld)    elloWorld   
REPLACE(‘abcd’,’b’,’m’)    amcd

示例:

SELECT
    employee_id,
    concat(first_name,last_name) name,
    job_id,
    length(last_name),
    instr(last_name,a) "Contains a?"
FROM
    employees
WHERE
    substr(job_id,4) = REP;

技术图片


数字函数

ROUND: 四舍五入
    ROUND(45.926, 2)            45.93

TRUNC:     截断
    TRUNC(45.926, 2)            45.92

MOD: 求余
    MOD(1600, 300)              100


SELECT
    round(45.923,2),
    round(45.923,0),
    round(45.923,-1)
FROM
    dual;
  • DUAL 是一个‘伪表’,可以用来测试函数和表达式

示例:

SELECT
    trunc(45.923,2),
    trunc(45.923),
    trunc(45.923,-2)
FROM
    dual;

技术图片


示例:

SELECT
    last_name,
    salary,
    mod(salary,5000)
FROM
    employees
WHERE
    job_id = SA_REP;

技术图片

 

日期

  • Oracle 中的日期型数据实际含有两个值: 日期和时间。
SELECT
    last_name,
    hire_date
FROM
    employees
WHERE
    last_name LIKE G%;

技术图片


函数SYSDATE 返回:
日期
时间


日期的数学运算

  • 在日期上加上或减去一个数字结果仍为日期。
  • 两个日期相减返回日期之间相差的天数。
  • 日期不允许做加法运算,无意义
  • 可以用数字除24来向日期中加上或减去天数。

示例:

SELECT
    last_name,
    ( SYSDATE - hire_date ) / 7 AS weeks
FROM
    employees
WHERE
    department_id = 90;

日期函数

函数 描述
ONTHS_BETWEEN 两个日期相差的月数
ADD_MONTHS 向指定日期中加上若干月数
NEXT_DAY 指定日期的下一个星期 * 对应的日期
LAST_DAY 本月的最后一天
ROUND 日期四舍五入
TRUNC   日期截断

 

MONTHS_BETWEEN (01-SEP-95,11-JAN-94)  -19.6774194

ADD_MONTHS (11-JAN-94,6)        -11-JUL-94

NEXT_DAY (01-SEP-95,FRIDAY)     -08-SEP-95

LAST_DAY(01-FEB-95)            -28-FEB-95


转换函数:隐 性 和显性

隐式数据类型转换:
Oracle 自动完成下列转换:

源数据类型  目标数据类型
VARCHAR2 or CHAR NUMBER
VARCHAR2 or CHAR DATE
NUMBER VARCHAR2
DATE  VARCHAR2

 

data<--> VARCHAR2<--> number


显式数据类型转换  :


技术图片

TO_CHAR函数对日期的转换

TO_CHAR(date, format_model)


格式:

  • 必须包含在单引号中而且大小写敏感。
  • 可以包含任意的有效的日期格式。
  • 日期之间用逗号隔开。

示例:

SELECT
    TO_CHAR(SYSDATE,yyyy-mm-dd hh:mi:ss)
FROM
    dual;

技术图片



日期格式的元素

YYYY 2004
YEAR    TWO THOUSAND AND FOUR
MM    02
MONTH    JULY
MON    JUL
DY    MON
DAY    MONDAY
DD    02


   







日期格式的元素

HH24:MI:SS AM   15:45:32 PM

使用双引号向日期中添加字符

DD "of" MONTH  12 of OCTOBER


TO_CHAR 函数对日期的转换

SELECT
    last_name,
    TO_CHAR(hire_date,DD Month YYYY) AS hiredate
FROM
    employees;


技术图片

示例

SELECT
    employee_id,
    last_name,
    hire_date
FROM
    employees
WHERE
    TO_CHAR(hire_date,yyyy-mm-dd) = 1987-09-17;

技术图片





TO_DATE 函数对字符的转换

使用 TO_DATE :

TO_DATE(char[, ‘format_model‘])

使用 TO_DATE 函数将字符转换成数字:

TO_DATE(‘2012年10月29日 08:10:21’,’yyyy“年”mm”月”dd“日”hh:mi:ss’) From dual

 

  • TO_CHAR函数对数字的转换
  • TO_CHAR(number, ‘format_model‘)

TO_CHAR 函数中经常使用的几种格式:


9   
数字
0  零
$ 美元符
L 本地货币符号
. 小数点
, 千位符



示例

SELECT
    TO_CHAR(salary,$99,999.00) salary
FROM
    employees
WHERE
    last_name = Ernst;

技术图片



TO_NUMBER 函数对字符的转换

  • 使用 TO_NUMBER 函数将字符转换成日期:
TO_NUMBER(char[, ‘format_model‘])

使用 TO_NUMBER :

TO_NUMBER(‘¥1,234,567,890.00’,’L999,999,999,999.99’) from dual

通用函数

这些函数适用于任何数据类型,同时也适用于空值:

NVL (expr1, expr2)
NVL2 (expr1, expr2, expr3)
NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., exprn)

NVL 函数

  • 将空值转换成一个已知的值
  • 可以使用的数据类型有日期、字符、数字。

函数的一般形式:

  • NVL(commission_pct,0)
  • NVL(hire_date,‘01-JAN-97‘)
  • NVL(job_id,‘No Job Yet‘)

示例:

SELECT
    last_name,
    salary,
    nvl(commission_pct,0),
    ( salary * 12 ) + ( salary * 12 * nvl(commission_pct,0) ) an_sal
FROM
    employees;

技术图片




使用 NVL2 函数

  • NVL2 (expr1, expr2, expr3) : expr1不为NULL,返回expr2;为NULL,返回expr3。
  • exp1 != null ? exp2 : exp3


示例:

SELECT
    last_name,
    salary,
    commission_pct,
    nvl2(commission_pct,SAL+COMM,SAL) income
FROM
    employees
WHERE
    department_id IN (
        50,
        80
    );

技术图片




使用 NULLIF 函数

  • NULLIF (expr1, expr2) :  相等返回NULL,不等返回expr1

 

SELECT
    first_name,
    length(first_name) "expr1",
    last_name,
    length(last_name) "expr2",
    nullif(length(first_name),length(last_name) ) result
FROM
    employees;

技术图片



使用 COALESCE 函数

  • COALESCE 与 NVL 相比的优点在于 COALESCE 可以同时处理交替的多个值。
  • 如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE 。
SELECT
    last_name,
    commission_pct,
    salary,
    coalesce(commission_pct,salary,1) comm
FROM
    employees
ORDER BY
    commission_pct;

技术图片



条件表达式

  • 在 SQL 语句中使用IF-THEN-ELSE 逻辑


使用两种方法:

  •     CASE 表达式
  •     DECODE 函数



CASE 表达式

  • 在需要使用 IF-THEN-ELSE 逻辑时:
CASE expr WHEN comparison_expr1 THEN return_expr1
         [WHEN comparison_expr2 THEN return_expr2
          WHEN comparison_exprn THEN return_exprn
          ELSE else_expr]
END


示例:

SELECT
    last_name,
    job_id,
    salary,
    CASE job_id
            WHEN IT_PROG    THEN 1.10 * salary
            WHEN ST_CLERK   THEN 1.15 * salary
            WHEN SA_REP     THEN 1.20 * salary
            ELSE salary
        END
    "REVISED_SALARY"
FROM
    employees;

 

技术图片

DECODE 函数

  • 在需要使用 IF-THEN-ELSE 逻辑时:
DECODE(col|expression, search1, result1 ,
                     [, search2, result2,...,]
                     [, default])

示例

SELECT
    last_name,
    job_id,
    salary,
    DECODE(job_id,IT_PROG,1.10 * salary,ST_CLERK,1.15 * salary,SA_REP,1.20 * salary,salary) AS revised_salary
FROM
    employees;

技术图片

示例:

SELECT
    last_name,
    salary,
    DECODE(trunc(salary / 2000,0),0,0.00,1,0.09,2,0.20,3,0.30,4,0.40,5,0.42,6,0.44,0.45) tax_rate
FROM
    employees
WHERE
    department_id = 80;

技术图片


嵌套函数

  • 单行函数可以嵌套。
  • 嵌套函数的执行顺序是由内到外。


技术图片


示例

SELECT
    last_name,
    nvl(TO_CHAR(manager_id),No Manager)
FROM
    employees
WHERE
    manager_id IS NULL;

技术图片

Oracle系列四 单行函数查询语句

标签:instr   添加   pre   manager   nvl   图片   大小写   其他   tween   

原文地址:https://www.cnblogs.com/loaderman/p/11732492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!