SQL函数

SQL是用于访问和处理数据库的标准的计算机语言,我们所使用的的是Oracle SQL

一个数据库通常包含一个或多个表,每个表有一个名字表示,下图即为一个名为“emp”的表,接下来的操作都将基于以下的表进行

## 字符函数

字符函数:主要指参数类型是字符型,不同函数返回值可能是字符型或数值型

【大小写转换】

函数 效果 结果

LOWER('SQL Course')

将大写或大小写混合的字符转换成小写 sql course

UPPER('SQL Course')

将小写写或大小写混合的字符转换大写 SQL COURSE
INITCAP('SQL Course') 将每个单词的第一个字母转换成大写,其余的字母都转换成小写 Sql course

## 字符处理函数

## 数值函数

  • DUAL:是一张虚表,不能保存任何数据,只有一个字段,一行记录。当我们不希望从任何表中读取数据,同时又想利用SQL引擎中的计算表达式的能力帮我们运算时,就可以使用DUAL表。
  1. select ROUND(100.456,2),Round(100.456,0),Round(100.456,-1) from DUAL

## Date函数

默认的日期形式是: DD-MON-RR

我们可以在系统变量-环境变量中,添加   key = NLS_DATE_FORMAT  value = YYYY:MM:DD HH24:MI:SS  就可以正常按照‘年与日’的格式查询了!

  1. SELECT ename, sal, MONTHS_BETWEEN(SYSDATE,hiredate) months FROM emp ORDER BY months;
  2. SELECT ename, sal, hiredate, ADD_MONTHS(hiredate,3) new_date FROM emp WHERE hiredate>'01-1月-82';
  3. SELECT NEXT_DAY('2006-02-06','星期一') NEXT_DAY FROM DUAL;
  4. SELECT LAST_DAY('02-2月-06') "LAST DAY" FROM DUAL;
  1. SELECT empno, hiredate, ROUND(hiredate, 'MONTH') FROM emp WHERE SUBSTR(hiredate,-2,2)='';
  2. SELECT empno, hiredate, TRUNC(hiredate, 'MONTH') FROM emp WHERE SUBSTR(hiredate,-2,2)='';

## 转换函数

【隐式数据类型转换规则】

  • 不同的数据类型之间关联,如果不使用显式转换函数,则它会根据以下规则对数据进行隐式转换:   

    • 对于 INSERT 和 UPDATE 操作,oracle会把插入值或者更新值隐式转换为字段的数据类型
    • 对于SELECT语句,oracle会把字段的数据类型隐式转换为变量的数据类型
    • 当比较一个字符型和数值型的值时,oracle会把字符型的值隐式转换为数值型
    • 当比较字符型和日期型的数据时,oracle会把字符型转换为日期型
    • 用连接操作符 (||)时,oracle会把非字符类型的数据转换为字符类型
    • 如果字符类型的数据和非字符类型的数据(如number、date、rowid等)作算术运算,则oracle会将字符类型的数据转换为合适的数据类型,这些数据类型可能是number、date、rowid等

 【显式数据类型转换规则】

  • 通常是在字符类型、日期类型、数值类型之间进行显式转换。
  • 主要的三种显式转换函数:TO_char  TO_NUMBER TO_DATE
  • To_char(日期格式模型)
    • 必须用单引号引起来并且是大小写敏感的
    • 可以包含任何有效的日期元素
    • 使用逗号将日期型数据与日期型格式模型分隔开
    • 日期格式模型的元素
    • To_char用于日期型,用时间元素 格式化日期的事件部分
    • To_char语句中也可以通过双引号添加字符串
    • To_char作用于数值型,可以按照以下形式将数值型数据转化为变长的字符串
    • 栗子:
      1. SELECT ename, TO_CHAR(hiredate, 'DD Month YYYY') HIREDATE FROM emp;
      2. Select To_char(sal,'$99,999') Salary from emp where ename = 'Scott'
  • To_number:可以将一个字符串转换成数值型数据

    1. select to_number(1999) year from dual;
  • To_Date: 将一个字符串转换成日期型数据

    1. select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;

## 通用函数

  • 通用函数即与空值(NULL)相关的一些函数,完成对空值(NULL)的一些操作。
  • 主要包括以下函数:
    • NVL:如果expr1不是null,返回expr1,否则返回expr2

      1. SELECT ename, sal, comm, (sal*12)+NVL(comm,0) from emp
    • NVL2:如果expr1不是null,返回expr2,否则返回expr3
    • NULLIF:比较两个表达式,如果相等,返回null,否则,返回第一个表达式
    • COALESCE: COALESCE (表达式1, 表达式2, ...,表达式n)函数是对NVL函数的扩展。COALESCE函数的功能是返回第一个不为空的参数,参数个数不受限制。
      1. SELECT ename, COALESCE(comm, 0) comm , deptno FROM emp;
  • 条件处理函数:
    • CASE表达式:

      1. SELECT ename, deptno,
      2. (CASE deptno
      3. WHEN 10 THEN '销售部'
      4. WHEN 20 THEN '技术部'
      5. WHEN 30 THEN '管理部'
      6. ELSE '无' END)
      7. deptname
      8. FROM emp;
    • DECODE
      1. SELECT ename, deptno,
      2. decode(deptno,
      3. 10,'销售部',
      4. 20,'技术部',
      5. 30 , '管理部',
      6. '无') deptname
      7. FROM emp;

【东软实训】SQL函数的更多相关文章

  1. 【东软实训】SQL多表链接

    如果一个查询同时涉及两个以上的表,则称之为链接查询,链接查询是关系数据库中最主要的查询,主要包括等值链接查询.非等值链接查询.自身链接查询.外链接查询和复合条件链接查询. 这篇博文我们来对多表链接进行 ...

  2. 逆袭之旅DAY17.东软实训.Oracle.PLSQL.过程,函数,包,练习

    2018-07-13 14:54:46 --1.创建一个包,包含一个为雇员加薪的过程,一个为雇员减薪的过程 CREATE OR REPLACE PACKAGE pac_test1 IS PROCEDU ...

  3. 逆袭之旅DAY14.东软实训.Oracle.多表连接、分组函数、子查询

    2018-07-10 08:29:55 思考应用场景 异常数据的测试 6.显示能挣得奖金的雇员的姓名.工资.奖金,并以工资和奖金降序排列.select ename,sal,commfrom empWH ...

  4. 东软实训4-JDBC连接数据库

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  5. 【东软实训】SQLselect及其相关操作

    SQL select 及相关操作 SQL是用于访问和处理数据库的标准的计算机语言,我们所使用的的是Oracle SQL 一个数据库通常包含一个或多个表,每个表有一个名字表示,下图即为一个名为“emp” ...

  6. 逆袭之旅DAY16.东软实训.Oracle.索引

    2018-07-12 14:44:27 四.索引1.创建索引手动创建:create index 索引名 on 表名(列名,[列名,...])create table employee(pno numb ...

  7. 逆袭之旅DAY15.东软实训.Oracle.约束、序列、视图、索引、用户管理、角色

    2018-07-11  08:26:00 有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter表:(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系dep ...

  8. 逆袭之旅DAY13.东软实训.Oracle.简单的查询语句.限制.排序

    2018-07-09  21:34:00 一.简单查询: .查询数据表的所有列: SELECT * FROM 表名; SELECT 列名,列名.... FROM 表名; .起别名: SELECT 列名 ...

  9. 东软实训1 -jsp内置对象及其常用方法

    JSP 的内置对象及方法详细说明 一. request 对象 客户端的请求信息被封装在 request 对象中,通过它才能了解到客户的需 求,然后做出响应.它是 HttpServletRequest ...

随机推荐

  1. 并不对劲的manacher算法

    有些时候,后缀自动机并不能解决某些问题,或者解决很麻烦.这时就有各种神奇的字符串算法了. manacher算法用来O(|S|)地求出字符串S的最长的回文子串的长度.这是怎么做到的呢? 并不对劲的暴力选 ...

  2. AutoIT: 如何设置GUICtrlCreateCombo选项为不可修改状态

    GUICtrlCreateCombo中选中的选项是可修改的,也可设置为不可修改状态. #include<ComboConstants.au3> GUICtrlCreateLabel(, , ...

  3. python的thread和threading区别

    python提供了多种模块用来支持多线程编程, thread(在python3中改名为_thread),threading,和 queue模块. 通过加入queue模块,用户可以创建多个线程共享数据的 ...

  4. Lightoj 1140(数位DP)

    求一个区间内的数含有多少个0. dp[len][pre]表示长度为len的数,含有pre个0. 需要加一个标记,来表示前缀是否为0(可以是一串连续的0),如果前缀一直为0,就一直搜,如果前缀不为0,就 ...

  5. snnu(1110) 传输网络 (并查集+路径压缩+离线操作 || 线段树)

    1110: 传输网络 Time Limit: 3 Sec  Memory Limit: 512 MBSubmit: 43  Solved: 18[Submit][Status][Web Board] ...

  6. snnu1111(子序列求和)

    1111: 子序列求和 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 10  Solved: 2[Submit][Status][Web Board] [ ...

  7. redis info 参数说明

    原文: redis info 参数说明 redis 127.0.0.1:6381> info redis_version:2.4.16 # Redis 的版本redis_git_sha1:000 ...

  8. bzoj 5195: [Usaco2018 Feb]Directory Traversal【树形dp】

    注意到目录是一颗树结构,然后就简单了,预以1为根的处理出dis[u]为以这个点为根,到子树内的目录总长,si为子树内叶子数 第二遍dfs换根即可 #include<iostream> #i ...

  9. 解决Bad owner or permissions on .ssh/config 的问题

    在使用gei fetch 或者 sftp的时候,出现 Bad owner or permissions on .ssh/config的问题的解决办法 修改.ssh/config的权限: sudo ch ...

  10. 第四章 朴素贝叶斯法(naive_Bayes)

    总结 朴素贝叶斯法实质上是概率估计. 由于加上了输入变量的各个参量条件独立性的强假设,使得条件分布中的参数大大减少.同时准确率也降低. 概率论上比较反直觉的一个问题:三门问题:由于主持人已经限定了他打 ...