SQL函数

SQL函数分类

  • SQL函数主要有两种,分为单行函数、多行函数

    • 单行函数:只对一行进行变换,每行返回一个结果。可以转换数据类型,可以嵌套参数可以是一列或一个值
    • 多行函数:多行函数,每次对一组记录进行处理。然后对于这一组记录只返回一个结果。

单行函数

  • 单行函数的分类:主要有字符通用转换日期数值

字符函数

  • 字符函数分为:大小写控制函数字符控制函数

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

 SELECT 'helloworld Java',
LOWER('helloworld Java') AS "Lower Last_Name",
UPPER('helloWorld Java') AS "UPper Last_name",
INITCAP('helloWorld Java') AS "InitCap Last_Name"
FROM dual

  • 在全称匹配中,可以通过大小写的转换函数来进行字符的大小写转换。
字符控制函数

  • CONCAT(字符连接函数):CONCAT('Hello', ' World!')
SELECT CONCAT('Hello', ' World!') FROM  dual
  • SUBSTR(字符字串函数) :SUBSTR('HelloWorld', 1, 5)

    • SUBSTR函数字符串是从 1开始,这点和 Java 有点不同。
    • 函数的最后一个参数表示,从开始往后截取多少个字符串。
SELECT SUBSTR('abcdefgh',2,4) FROM dual;

  • LENGTH:取得字符串的长度LENGTH('HelloWorld!')
  • INSTR:获取某个字符在字符串中的位置INSTR('HelloWorld!','W')
SELECT LENGTH('HelloWorld!'),INSTR('HelloWorld!','W') FROM dual;

  • LPAD:左补齐函数LPAD(salary,10,'*')
  • RPAD:右补齐函数RPAD(salary,10,'*')
SELECT salary,LPAD(salary,10,'*'),RPAD(salary,10,'*') FROM employees;

  • TRIM去除前后字符函数,函数能去掉字符的前后空格,或者去掉字符串中首尾特定字符(使用该方式需要使用到FROM关键字)
SELECT TRIM('H' FROM 'HelloHWorldHH') FROM dual;
SELECT TRIM(' HelloHWorldHH ') FROM dual;

  • REPLACE字符串替换函数。能够替换字符串中所有的特定函数
SELECT REPLACE('abcdabcdabcd','a','m') FROM dual

数值函数

  • 数值函数主要有以下:ROUND: 四舍五入 、TRUNC: 截断、MOD: 求余

  • ROUND 函数:通过第二个参数,表示在第几位进行四舍五入,并且舍弃后面的数值
SELECT ROUND(45.923,2),ROUND(45.923,0),ROUND(45.923,-1) FROM dual

  • TRUNC函数,能够直接对于数值进行截断!不做任何进位操作
SELECT TRUNC(45.923,2),TRUNC(45.923,0),TRUNC(45.923,-1) FROM dual

  • MOD 函数,对数值进行求余运算。
SELECT salary, MOD(salary,1000) AS Mod_Salary FROM employees;

日期函数

  • Oracle 中的日期型数据实际含有两个值: 日期和时间。

  • 函数SYSDATE既包含日期也包含时间SELECT sysdate FROM dual

  • 日期的数学运算

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

SELECT last_name,(SYSDATE-hire_date)/7 AS Weeks
FROM employees
WHERE department_id = 90
  • 日期函数主要有以下几种:
函数 描述
MONTHS_BETWEEN 两个日期相差的月数
ADD_MONTHS 向指定日期中加上若干个月数
NEXT_DAY 指定日期的下一个星期所对应的日期
LAST_DAY 本月的最后一天
ROUND 日期四舍五入
TRUNC 日期截断
  • 时间和日期的表示方法:
yyyy  年、 mm   月、dd   日
hh 小时、 mi 分钟、ss 秒
day 星期
SELECT MONTHS_BETWEEN(SYSDATE+30,SYSDATE),
ADD_MONTHS(SYSDATE,2),
NEXT_DAY(SYSDATE,'星期四'),
LAST_DAY(SYSDATE),
ROUND(SYSDATE,'mm'),ROUND(SYSDATE,'yyyy'),
TRUNC(SYSDATE,'mm'),TRUNC(SYSDATE,'yyyy')
FROM dual;

转换函数

隐式数据类型转换
  • Oracle 自动完成下列转换:
源数据类型 目标数据类型
VARCHAR2 or CHAR NUMBER
VARCHAR2 or CHAR DATE
NUMBER VARCHAR2
DATE VARCHAR2
DATE <---> VARCHAR2 <---> NUMBER
显式的数据类型转换
  • 显式的数据类型转换主要使用到几个转换函数:

    • TO_DATE
    • TO_CAHR
    • TO_NUMBER
  • TO_CAHR函数对日期的转换的转换
    • TO_CHAR(date,'fomat_model')
  • 格式:
    • 必须包含在单引号中而且大小写敏感。
    • 可以包含任意的有效的日期格式。
    • 日期之间用逗号隔开。
select TO_CAHR(SYSDATE,'yyyy-MM-dd hh:mm:dd day') from dual
  • 日期格式的元素
Model View
YYYY 2016
YEAR twenty sixteen
MM 06
MONTH 6月(根据本地显示) 或者June
MON 6月(根据本地显示) 或者Jun
DY 星期六 或者 SATURDAY
DAY 星期六 或者 SAT
DD 18
  • 时间格式
HH:MI:SS AM         02:06:18 下午
HH24:MI:SS 14:06:18
  • 使用双引号向日期中添加字符
-- DD "of" MONTH    18 of 6月
select to_char(sysdate,'DD "of" MONTH') from dual
  • TO_DATE 函数对字符的转换

    • TO_DATE(CHAR,'fomat_model')
    • 使用TO_DATE函数将字符转换为数字
  • 注意:文字与格式的字符串要相匹配!
SELECT TO_DATE('2016年06月18日 14:31:35','yyyy"年"mm"月"dd"日"hh24:mi:ss')
From dual
  • TO_DATE 函数对数字的转换

    • 下面是在TO_CHAR 函数中经常使用的几种格式:

  • 金额格式,如果是用9,不足的位数不会填充;但是使用0,就会在不足的位上补零

SELECT TO_CHAR(salary, '$999,999.00') SALARY
FROM employees
WHERE last_name = 'Ernst'; SELECT TO_CHAR(salary, '$000,000.00') SALARY
FROM employees
WHERE last_name = 'Ernst';
  • TO_NUMBER 函数对字符的转换
  • 使用 TO_NUMBER 函数将字符转换成数值:
    • TO_DATE(CHAR,'fomat_model')
SELECT 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')
  • NVL2 函数:NVL2 (expr1, expr2, expr3) : expr1不为NULL,返回expr2;为NULL,返回expr3。

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 。
-- 如果commision_pct 为空,返回salary,如果salary还为空就返回10.  

SELECT   last_name,
COALESCE(commission_pct, salary, 10) comm
FROM employees
ORDER BY commission_pct;
  • 条件表达式

    • 在 SQL 语句中使用IF-THEN-ELSE 逻辑
    • 使用两种方法:
      • CASE 表达式
      • DECODE 函数
  • CASE 表达式示例

CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
-- 练习:查询部门号为 10, 20, 30 的员工信息, 若部门号为 10, 则打印其工资的 1.1 倍, 20 号部门, 则打印其工资的 1.2 倍, 30 号部门打印其工资的 1.3 倍数
SELECT employee_id,last_name,department_id,salary,
CASE department_id WHEN 10 THEN salary*1.1
WHEN 20 THEN salary*1.2
WHEN 30 THEN salary*1.3
ELSE salary
END AS "new_salary"
FROM employees
WHERE department_id in (10,20,30)
  • DECODE 函数示例
DECODE(col|expression, search1, result1 ,
[, search2, result2,...,]
[, default])
-- DECODE版本
SELECT employee_id,last_name,department_id,salary,
DECODE (department_id,10, salary*1.1,
20, salary*1.2,
30, salary*1.3,
salary) AS "new_salary"
FROM employees
WHERE department_id in (10,20,30)

嵌套函数

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

Oracle_SQL函数-单行函数的更多相关文章

  1. Oracle_SQL(6) 单行函数

    一.单行函数1.定义:对表或视图的查询时,针对每行记录返回一个值的函数.2.用途:用于select语句,where条件3.分类: 数值函数 Number Functions 字符函数(返回字符) Ch ...

  2. Oracle——单行函数

    两种 SQL 函数 单行函数 字符函数 大小写控制函数 SELECT employee_id, last_name, department_id FROM employees WHERE last_n ...

  3. Oracle学习笔记_03_单行函数

    1.SQL函数: 单行函数.多行函数 单行函数:       操作数据对象       接受参数返回一个结果       只对一行进行变换       每行返回一个结果       可以转换数据类型  ...

  4. DQL---条件查询、单行函数、多行函数、分组函数、数据类型

    一.DQL 1.基本规则: (1)对于日期型数据,做 *,/ 运算不合法,可以进行 +, - 运算.比如给日期加一天或减一个月,结果仍为一个日期.两个日期间只能为减法,返回两个日期相差的天数,两个日期 ...

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

    单行函数 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以转换数据类型 可以嵌套 参数可以是一列或一个值 包含:字符,数值,日期,转换,通用 字符函数 1.大小写控制函数: ...

  6. sql常用单行函数

    学到数据库了,小记一下的喽~~~>>>>常用的单行函数 select * from employees 查询所有 select first_name,lower(first_n ...

  7. Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt

    PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...

  8. Oracle 单行函数

    一.什么是函数 任何东西,只要它能接收输入,对输入进行加工并产生输出,它就可以被称为函数. 二.单行函数简介 单行函数只对表中的一行数据进行操作,并且对每一行数据只产生一个输出结果.单行函数可以接受一 ...

  9. Oracle中的单行函数

    Oracle中的单行函数 1 字符函数 UPPER()--将字符串转换为大写 SELECT UPPER('abc') FROM dual; LOWER()-将字符串转换为小写 SELECT LOWER ...

随机推荐

  1. dotnet webapi 中添加Swagger文档

    首先添加"SwaggerGenerator": "1.1.0","SwaggerUi": "1.1.0" 需要注意的是这 ...

  2. Html5+NodeJS——拖拽多个文件上传到服务器

    实现多文件拖拽上传的简易Node项目,可以在github上下载,你可以先下载下来:https://github.com/Johnharvy/upLoadFiles/. 解开下载下的zip格式包,建议用 ...

  3. F.I.S初探(前端工程化)

    云笔记:http://note.youdao.com/share/?id=7c4a2dcf118f0ad7bb52a36aaee46a7a&type=note   一.初识FIS 在做项目中遇 ...

  4. Visual Studio 2013 Ultimate的可视化代码功能

    可视化和了解代码综合了如何使用visual studio可视化代码来帮助理解代码: 理解代码和代码之间的关系:(1)Code Map(2)Dependency Graphs 理解代码交互:Sequen ...

  5. (新年快乐)ABP理论学习之本地化(2016第一篇)

    返回总目录 本篇目录 应用语言 本地化资源 获取本地化文本 扩展本地化资源 最佳实践 应用语言 一个应用至少有一种UI语言,许多应用不止有一种语言.ABP为应用提供了一个灵活的本地化系统. 第一件事情 ...

  6. 几种简单的负载均衡算法及其Java代码实现

    什么是负载均衡 负载均衡,英文名称为Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助.通过某种负载分担技 ...

  7. 剑指Offer面试题:4.从尾到头打印链表

    一.题目:从尾到头打印链表 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 到解决这个问题肯定要遍历链表.遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头.也就是说第一个遍历到的结 ...

  8. Linux的原子操作与同步机制

    Linux的原子操作与同步机制   .进程1执行完“mov eax, [count]”后,寄存器eax内保存了count的值0.此时,进程2被调度执行,抢占了进程1的CPU的控制权.进程2执行“cou ...

  9. Wireshark抓包分析/TCP/Http/Https及代理IP的识别

    前言 坦白讲,没想好怎样的开头.辗转三年过去了.一切已经变化了许多,一切似乎从没有改变. 前段时间调研了一次代理相关的知识,简单整理一下分享之.如有错误,欢迎指正. 涉及 Proxy IP应用 原理/ ...

  10. Node.js返回JSONP

    在使用JQuery的Ajax从服务器请求数据或者向服务器发送数据时常常会遇到跨域无法请求的错误,常用的解决办法就是在Ajax中使用JSONP.基于安全性考虑,浏览器会存在同源策略,然而<scri ...