




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
01 概述 关系数据库概念 SQL 语句概述 例子数据库概述 02 基本查询 7 最简单的 select 语句 错误的 sql 语句 选择特定列 选择算术表达式 连接运算符 重复行 基本 select 语句总结 03 限制和排序 8 where 子句 between 条件 in 条件 like 条件 null 条件 逻辑条件 优先顺序 order by 结果排序 04 关联查询 7 等值关联 更多关联条件 自联结 join on 联结 三向联结 join on 附加条件 左右连接和全连接 05 单行函数 12 函数的概念 字符函数 数字函数 日期格式 时间函数 当前时间 时间函数 分解 时间函数 计算 时间函数 转换 to char 函数 常规函数 case 函数 decode 函数 06 分组函数 9 分组函数概念 分组函数语法 分组函数 COUNT 分组函数与空值 创建数据分组 分组函数常见错误 排除分组结果 HAVING 嵌套分组函数 分组函数进阶练习 07 子查询 3 子查询 单行子查询 多行子查询 08 集合 4 集合概念 UNION 并集 INTERSECT 交集 MINUS 补集 09 数据操纵 8 数据操纵 DML 概念 DML INSERT 单行 DML INSERT 多行 DML UPDATE DML DELETE DML MERGE 合并 数据库事务处理 控制事务处理 10 创建表 4 创建表 子查询创建表 ALTER TABLE 删除表 11 约束 3 表约束 创建约束 添加约束 12 视图 4 视图 概念 视图 创建 删除视图 执行排序 Top N 分析 13 索引 4 索引概念 索引创建 什么情况下要创建索引 删除索引 14 序列 5 序列概念 创建序列 使用序列 修改序列 删除序列 1 1 关系数据库概念关系数据库概念 1 E F Codd 博士在 1970 年提出了数据库系统的关系模型 这是所有关系数据库 管理系统 RDBMS 的基础 2 关系模型由以下要素构成 对象或关系集合 处理关系的运算符集 确保精确和一致的数据完整性 3 关系数据库使用二维表存储信息 列表示实体模型的所有属性 比如员工编码 姓名 性别 工资 所在部门编码等 行表示一个实体的所有属性的信息 比如 01 张三 男 1500 等 4 多个表之间通过外键来表达关联 比如部门表存储部门的详细信息 而员工表 只需要存储部门表的主键 部门编码 通过这个外键字段就建立了员工表和部门 表之间的关联 1 2SQL 语句概述语句概述 1 SQL 结构查询语言 是美国国家标准协会制订的一种标准语言 用于操作关系数据 库 使用者不需要知道数据是如何存储的 通过 SQL 语句就可以操作数据库 2 所有关系数据库都支持标准 SQL 语言进行管理 有些数据库厂商针对各自数据库的特 点还做了扩展 比如 Sql Server Oracle 等都有各自的扩展 学习掌握标准 Sql 以后 在 使用某一个厂商的数据库时 可以继续学习扩展语法 3 SQL 语句分类 SELECT 数据检索 INSERT 数据操纵语言 DML UPDATE DELETE MERGE CREATE 数据定义语言 DDL ALTER DROP RENAME TRUNCATE COMMIT 事务处理控制语言 DTL ROLLBACK SAVEPOINT GRANT 数据控制语言 DCL REVOKE 1 3 例子数据库概述例子数据库概述 1 在本课程中使用的例子数据库是一个人力资源数据库 简称 hr 库 每个学员都 会自动拥有一个例子数据库 假如数据库被破坏导致不能使用 在命令行输入 initdb 即可以重新初始化自己的例子数据库 2 例子数据库拥有员工表 employees 部门表 departments 岗位表 jobs 工作历史表 job history 国家表 countories 地区表 regions 办公场所表 locations 3 查询 hr 中有几个表 show tables from hr 注意 每个语句都要以 作为结束 4 查询某个表的结构 如 employees show columns from hr employees 初始化例子数据库 如果例子数据库不正常 可以用以下命令重新初始化 initdb 注意 这条命令不是标准 sql 语言 是我们系统用于支持教学的专用脚本 hr 里的表 查询 hr 里的表 show tables from hr 练习 了解表结构 10 分钟 分别执行以下语句 查看 hr 中各表的结构 show columns from hr countries show columns from hr regions show columns from hr locations show columns from hr jobs show columns from hr job history show columns from hr departments show columns from hr employees 2 1 最简单的最简单的 select 语句语句 查询所有部门表的数据 select from hr departments 1 理解 以上语句包含一个 select 字句 和一个 from 字句 select 子句确定查询 哪些列的数据 from 子句确定从哪个表查询 最简单的 select 语句也必须包含 select 子句和一个 from 子句 2 select 和 from 都是关键字 3 表示查询所有列 4 hr department 指查询 hr schema 人力资源方案 中的 departments 部门 表 5 查询出来的结果是一个二维表 表头是字段名 每一行数据即代表一个部门对 象的所有信息 部门表所有数据 查询出部门表的所有数据 select from hr departments 练习 所有表的数据 15 分钟 1 用 select 语句依次查询所有表的数据 select from hr countries select from hr regions select from hr locations select from hr jobs select from hr job history select from hr employees select from hr departments 2 将每个表的查询结果与之前用 show columns 语句查询出的表结构进行对照 show columns from hr countries 2 2 错误的错误的 sql 语句语句 sql 语句在输入的过程中经常会出错 常见的错误比如说 1 关键字写错 如 select 写成了 selct from 写成了 form 2 from 对象写错了 如 departments 写成了 department 或忘记加 hr 3 字段名写错了 当 sql 语句写错的时候 执行 sql 语句会报错 给出错误信息并且会附带一个错误 码 错误信息试图描述错误出现在语句的什么位置 而错误码用来指明错误的类型 练习 select 改错 5 分钟 找出以下语句的错误 修改使之能正确运行 selcet form hr employes 2 3 选择特定列选择特定列 1 除了用 查询所有列之外 我们也可以在 select 子句中指定列名 按顺序列出 所有想要查询的列名 用逗号分隔 例如 select location id department id from hr departments 2 在查询的每个列名后面 可以设置列别名 在列名和列别名之间可选用关键字 as 例如 select location id lid department id as dep id from hr departments 如果列别名包含空格或特殊字符 或者想大小写区分 可用双引号括起来 练习 指定列和别名 5 分钟 在员工表中查询员工编码 姓氏 岗位编码 聘用日期 将标题分别改 为 员工 姓名 岗位 Hire Date 查询员工表指定字段 查询员工表 显示每位员工的员工编号 姓氏 last name 职务代码 聘用日 期 如果忘记了字段名 记得用 show columns from hr employees 列别名 将以下 sql 语句的列名修改为中文别名 select location id department id from hr departments 2 4 选择算术表达式选择算术表达式 1 在 select 子句中 可以使用算术表达式 可将已有列参与表达式计算输出一个 新的显示列 只是显示 没有真的存储新列 例如 select last name salary salary 300 from hr employees 2 算术表达式可用运算符 其优先级为 可用小括号强制优先计算 例如 select last name salary 12 salary 100 from hr employees 以上最后一列表示年薪 月薪加每月奖金 然后乘以 12 个月 3 空值 如果某一列没有存入数据 就认为该值为空 空不同于零或空格 就是 指没有 我们的例子数据库中 将空值的查询返回 null 例如 select last name job id salary commission pct from hr employees 提成比率字段 只有销售岗位才有 普通员工的提成比率为空值 4 如果算术表达式中的字段为空值 则结果也为空值 不会报错 例如 select last name 12 salary commission pct from hr employees 演示 工资加 300 查询员工表的姓氏 工资 工资 300 select last name salary salary 300 from hr employees 演示 年薪表达式 查询员工表中每个员工的年薪 年薪 为 每个月月薪 100 然后乘以 12 月 select last name salary 12 salary 100 from hr employees 演示 空值 查询员工表的提成比率 select last name job id salary commission pct from hr employees 演示 表达式中的空值 查询员工的年度提成金额 select last name 12 salary commission pct from hr employees 练习 找错 5 分钟 以下语句有四个错误 请找出错误所在 select employee id last name sal x 12 ANNUAL SALARY from hr employees 2 5 连接运算符连接运算符 1 连接运算符 将列链接到其它列 字符串 算术表达式或常数值 从而形成一个单 一的输出列 例如 select last name first name as name from hr employees 2 文字字符串 用单引号包含 可用在 select 子句中 作为文字字符串 查询结果中每 个行都会显示 select abc from hr employees 3 文字字符串可用于连接运算 用以分割及描述合成的内容 例如 select 姓 last name 名 first name as name from hr employees 演示 连接姓名 将员工表的姓氏和姓名连接起来 形成一个输出列 name select last name first name as name from hr employees 演示 文字字符串 演示文字字符串 select hello from hr employees 演示 文字连接 将姓氏和名字连接起来 中间增加文字字符串说明 select 姓 last name 名 first name as name from hr employees 练习 员工头衔 5 分钟 将员工姓氏与岗位连接起来 中间用逗号及空格分割 然后设置 别名为 Employee and title 2 6 重复行重复行 1 在 select 查询语句中 默认结果会显示所有的行 即使这些行是重复的 例如 select department id from hr employees 查询结果会看到许多部门编码是重复的 2 可以通过 distinct 关键字消除重复行 例如 select distinct department id from hr employees 如上 distinct 放在要消除重复的列前 以空格分离 3 可以在 distinct 限定的列后面再指定其它列 消除重复的结果会影响所有的列 根据列 的组合进行重复的消除 例如 select distinct department id job id from hr employees 演示 消除重复 查询所有员工一共分布在多少个部门 select distinct department id from hr employees 练习 提成比率 5 分钟 请查询当前员工一共设置了几种提成比率 2 7 基本基本 select 语句总结语句总结 select distinct column expression alias from table 上面语句中 1 选择所有列 2 distinct 消除重复项 3 column 选择制定的列 4 expression 表达式 5 alias 列别名 3 1where 子句子句 1 在 sql 语言中 使用 where 子句可以限制查询的范围 例如 select from hr employees where department id 90 查询部门编码为 90 的所有员工信息 2 where 的条件 在 where 关键字后面跟着的条件限制范围为满足条件的所有行 条件 的语法如下 运算表达式 比较符 值或表达式 salary 6000 last name smith 字符串用单引号 hire date 01 JAN 95 日期用单引号 last name like ith 模糊匹配 表示以 ith 结尾的字符串 commission pct is null 提成比率为空值 注意 表中所有字段都可以参与条件的比较 不管是否在 select 中 3 常用的比较符 not in set 表示在后面的集合里面 not like 模糊匹配 not is null 是否为空 not between and 在两个值之间 包含两个值 演示 部门 90 的员工 查询部门编码为 90 的员工信息 select employee id last name job id department id from hr employees where department id 90 练习 查询高薪员工 5 分钟 查询工资超过 12000 的员工的姓氏和工资 练习 id 查找 查询工号为 176 的员工信息 了解他在什么部门 做什么工作 3 2between 条件条件 1 用 between 条件可以查询值在一个范围内的行 例如 select last name salary from hr employees where salary between 2500 and 3500 下限在前 上限在后 2 between 的取反条件可以用 not between 例如 select last name salary from hr employees where salary not between 2500 and 3500 演示 between 查询工资在 2500 和 3500 之间的员工 select last name salary from hr employees where salary between 2500 and 3500 练习 薪资范围查询 5 分钟 查询工资不在 5000 到 12000 范围内的员工的姓氏 部门 岗位 工资 3 3 in 条件条件 1 使用 in 条件可以限制指定集合中的值 当条件表达式在集合内时 就会满足条件 in 条件也被称之为成员条件 select employee id last name manager id from hr employees where manager id in 100 101 201 以上查询经理为 100 101 201 的所有员工 2 in 可以使用所有数据类型 比如以下示例返回员工姓氏满足集合条件 select employee id last name from hr employees where last name in Hartsten Vargas 注意如果是日期或字符串 要用单引号 演示 经理集合查询 查询经理为 100 101 或 201 的所有员工 练习 部门集合查询 5 分钟 用 in 条件查询在部门 20 和 50 中的所有员工的姓氏和部门编号 3 4 like 条件条件 1 用 like 条件可以对字符串执行模糊匹配查找 例如 select employee id from hr employees where first name like s 以 s 开头的字符串 2 like 使用的通配符 代表 0 个或任意多个字符 下划线 代表任意一个字符 一定会有一个 不能没有 3 通配符组合 通配符可以放各种位置 也可以互相组合 比如 s s 字符开头的字符串 s s 字符结尾的字符串 s 第二个字符为 s 后面随意 s 总共两个字符 第二个为 s 4 由于 和 用作了通配符 如果内容中本身有 或 的 就需要用到反义 如 job id like SA escape escape 表示 用 作为反义符 表示包含 sa 的任意字符串 事实上 使用 作为反义不需要加 escape 它是默认的 如果想使用其它字符作为反义 符 一定要加 escape 例如 job id like SA escape 演示 like 搜索 1995 年进入公司的员工 select last name hire date from hr employees where hire date like 1999 练习 like 通配符 5 分钟 搜索姓氏 last name 中第三个字母为 a 的所有员工 练习 销售岗位的员工 5 分钟 销售岗位的编码为 SA 请你搜索出所有销售岗位的员工信息 employee id last name job id 3 5 null 条件条件 is null 用来测试是否空值 is not nul 表示非空 例如 select last name job id commission pct from hr employees where commission pct is null 以上语句查询没有提成比例的员工 即非销售线员工 练习 公司老大 5 分钟 查询公司所有员工的老大 提示 所有员工都有经理 只有老大是没有经理的 3 6 逻辑条件逻辑条件 1 到目前为止 所有 where 条件都只有一个条件 有时候需要用到多个条件进行更精准 的搜索 需要用到 and 和 or 运算符 2 逻辑运算符 and 条件 1 and 条件 2 两个条件都满足才为 true or 条件 1 or 条件 2 其中一个条件满足就为 true not not 条件 取反 3 and 的例子 select employee id last name department id salary from hr employees where salary 10000 and department id 90 4 or 的例子 select employee id last name department id salary from hr employees where salary 10000 or department id 90 演示 逻辑运算符 演示 and 和 or select employee id last name department id salary from hr employees where salary 10000 and department id 90 select employee id last name department id salary from hr employees where salary 10000 or department id 90 练习 部门和薪资 5 分钟 查询工资在 5000 和 12000 之间并且在部门 20 或 50 中的员工的姓氏 部门 工资 提示 用 between 和 in 的组合 练习 like 组合 5 分钟 查询出所有姓氏中有 a 或者有 e 的所有员工 3 7 优先顺序优先顺序 1 where 条件的优先顺序如下 1 算术运算符 2 连接运算符 3 比较条件 4 is not null not like not in 5 not between 6 not 逻辑条件 7 and 逻辑条件 8 or 逻辑条件 2 如果写复杂条件组合的时候 为防止出现顺序错误 建议用小括号括起来 例如以下 两个条件 条件 1 岗位是销售代表 或者 岗位是总裁并且工资超过 15000 where job id SA REP or job id AD PRES and salary 15000 条件 2 岗位是销售代表或者总裁 并且工资超过 15000 where job id SA REP or job id AD PRES and salary 15000 练习 组合条件 5 分钟 查询出职位为销售代表 SA REP 并且工资超过 10000 的 或者职位为仓库 管理员 ST CLERK 并且工资不等于 2500 3500 或 7000 的所有员工的姓氏 职务 工资 3 8 order by 结果排序结果排序 1 查询出结果以后 顺序是没有定义的 可以使用 order by 子句来进行排序 order by 子句必须放在 sql 语句的最后 order by column expr ASC DESC 2 order by 必须要指定排序的对象 可以是列 表达式 别名 3 排序方式有两种 asc 升序和 desc 逆序 默认是升序 4 排序以后 往往伴随着分页查询 例如 查询公司里工资最高的 5 个人 select last name salary from hr employees order by salary desc limit 5 offset 0 limit 表示查询几条 一页几条 offset 表示从哪里开始查 注 不同的数据库 分页机制有不同的实现 这里只是本系统数据库的实现方式 具体应 用时要根据数据库类型而定 演示 按聘用时间升序 演示 order by 按聘用时间降序 时间从近到远 早的排在后面 select last name hire date from hr employees order by hire date desc 演示 按别名排序 按照年薪别名进行排序 select last name salary 12 annsal from hr employees order by annsal 演示 多列排序 多列排序 先按部门降序 同一部门的按年薪升序 select last name department id salary 12 annsal from hr employees order by department id desc annsal 练习 查询和排序 5 分钟 查询能赚取提成的员工的姓氏 工资和提成比率 按照工资和提成比率降序排 列 练习 字母排序 5 分钟 按照姓氏的字母顺序查询部门 20 和部门 50 中的所有员工的姓氏和部门编号 练习 日期排序 5 分钟 查询在 1998 年 2 月 20 日和 1998 年 5 月 1 日之间聘用的员工的姓氏 职务 聘用日期 按照聘用日期进行升序排列 练习 分页查询 5 分钟 分页查询公司中按工资排序的员工姓氏和工资 假设一页为 20 条数据 现在要求查询出 第 3 页的数据 4 1 等值关联等值关联 1 当需要查询多表关联数据时 可以在 where 使用联结条件 例如 员工表里保存着部门编码 但是没有部门名称 部门名称在部门表里 现在需要查询出所 有员工的姓氏 部门编码 部门名称 select e last name e department id d department name from hr employees e hr departments d where e department id d department id 2 以上 sql 语句的 where 条件是一个等值联结 通过员工表中的部门编码 和部门表中的 部门编码相等 来确定两个表的数据联结到一起 如果不加这一句联结条件 就会形成一 个笛卡尔乘积 员工表的每一行 乘以 部门表的每一行 例如 select e last name e department id d department name from hr employees e hr departments d 3 等值联结语法 select table1 column table2 column from table1 table2 where table1 column1 table2 column2 找出所有两个表中这两个字段相等的记录 如果有一个表中此字段的值在另一表中不存在 则记录会被过滤 也可以同时联结更多的表 一般 n 个表进行联结 需要 n 1 个联结条件 演示 员工部门关联 查询所有员工的姓氏 部门编码 部门名称 select e last name e department id d department name from hr employees e hr departments d where e department id d department id 注意 结果只有 106 条 观察缺少的那一条 department id 是 null 练习 员工和职务 5 分钟 查询所有员工的姓氏 职务编码 职务名称 4 2 更多关联条件更多关联条件 1 在 where 里面可以增加更多的条件 从而更加精准的限制范围 例如 要查询员工 Matos 的部门编号和名称 select e last name e department id d department name from hr employees e hr departments d where e department id d department id and e last name Matos 2 表别名 from hr employees e 表示将 employees 表用别名 e 代替 表别名使得语句精简一些 如果使用了表别名 那么整个语句中都必须使用这个表别名来 代替表名 3 用 and 可以联结更多的表 例如 三表关联 显示所有员工的姓氏 员工表 部门名称 部门表 所在城市 场所表 select e last name d department name l city from hr employees e hr departments d hr locations l where e department id d department id and d location id l location id 演示 三表关联 查询所有员工的姓氏 部门名称 所在城市 需要用到三表关联 其中 employees 表与 departments 表关联 departments 表与 locations 表关联 练习 赚提成员工的关联信息 10 分钟 查询所有能赚取提成的员工的姓氏 部门名称 办公城市 提示 1 三表关联 2 提成比例 4 3 自联结自联结 有时候 我们需要将表联结到自身 例如 查找员工 Whalen 的经理姓名 select e last name e manager id m last name from hr employees e hr employees m where e manager id m employee id and e last name Whalen 在这个例子里 employee 表被模拟为两个表 e 和 m 联结条件为 e 的经理编号 m 的 员工编码 最终查询出员工的经理姓名 演示 自联结 查找员工 Whalen 的姓氏 经理编号 经理姓名 select e last name e manager id m last name from hr employees e hr employees m where e manager id m employee id and e last name Whalen 4 4 join on 联结联结 SQL1999 语法规定了更加规范全面的联结语法 这些联结语法用在 from 子句里 注意不 是 where 了 其中 on 子句使用最多 例如 select e last name d department name from hr employees e join hr departments d on e department id d department id 或者自联结的例子 select e last name m last name manager from hr employees e join hr employees m on e manager id m employee id 演示 join on 自联结 用 join on 查找员工的姓氏和经理的姓氏 select e last name m last name manager from hr employees e join hr employees m on e manager id m employee id 练习 查询同一个老大 10 分钟 查询与 Whalen 同一个经理的所有员工的信息 显示部门编码 Whalen 员工 同事姓氏 colleague 经理编码 4 5 三向联结三向联结 三向联结是三个表之间的联结 如下 select employee id city department name from hr employees e join hr departments d on e department id d department id join hr locations l on d location id l location id 在 SQL1999 语法中 联结从左到右执行 第一个联结是员工表联结部门表 可以引用这 两个表中的列 但是不能引用场所表的列 而第二个联结可以引用所有三个表中的列 演示 三向联结 用 join on 对员工表 部门表 场所表进行三表联结 查询出员工编码 城市 部门名称 select employee id city department name from hr employees e join hr departments d on e department id d department id join hr locations l on d location id l location id 练习 三向联结附加条件 10 分钟 查询在 Toronto 城市工作的所有员工的姓氏 职务 部门编号 部门名称 提醒 城市是 locations 表的 city 字段 4 6 join on 附加条件附加条件 在 join on 语句之后可以在 where 里面增加附加条件 附件条件的比较两端可以继续使用 关联表的列 比如 1 查询 Whalen 的经理姓氏 select e last name e manager id m last name from hr employees e join hr employees m on e manager id m employee id where e last name Whalen 2 查询比员工 Whalen 工资低的所有员工的姓氏和工资 按工资倒序 select c last name c salary from hr employees e join hr employees c on e last name Whalen where c salary e salary order by c salary desc 演示 查询比 Whalen 工资的员工 查询所有工资比 Whalen 低的员工的姓氏 工资 以工资倒序排列 select c last name c salary from hr employees e join hr employees c on e last name Whalen where c salary 45 93 trunc 截断 trunc 45 926 2 45 92 mod 求余 mod 16 3 1 练习 加工资 5 分钟 公司准备加薪 15 请您 1 显示每位员工的员工编号 姓氏 工资 加薪后的工资 New Salary 以四舍五入整 数显示 2 增加一个字段显示加薪的增量 Increase 5 4 日期格式日期格式 1 日期以内部数字格式存储 世纪 年 月 日 小时 分钟 秒 毫秒 这是所有数 据库系统 甚至开发语言都支持的 2 日期在显示的时候 是按照一定的格式进行显示 比如格式为 yyyy MMM dd 2014 八月 11 常用的格式有 注意大小写 yy 两位的年 如 14 yyyy 四位的年 如 2014 M 不带前导 0 的数字月 如 8 MM 两位数字月 如 08 MMM 缩写的字符月 如八月 中文 Aug 英文 MMMM 完整月份名 中文和缩写一样 英文是全称 EEE 星期几缩写 EEEE 星期几全称 w 年的第几周 W 月的第几周 d 不带前导 0 的数字日 如 1 dd 带前导 0 的数字日 如 01 h 12 小时制不带前导 0 的数字小时 如 5 hh 12 小时制带前导 0 的数字小时 如 05 H 24 小时制不带前导 0 的数字小时 如 5 HH 24 小时制带前导 0 的数字小时 如 17 m 不带前导 0 的数字分钟 如 1 mm 带前导 0 的数字分钟 如 01 s 不带前导 0 的数字秒 如 1 ss 带前导 0 的数字秒 如 01 通用日期分隔符 也有用 的 通用时间分隔符 z 时区 如 CST GMT 等 en 字符编码 英文 zh 字符编码 中文 3 在本系统中 日期格式可以通过以下函数来进行测试 select formatdatetime timestamp 2014 08 11 17 11 20 yyyy MMM dd HH mm ss z en GMT 演示 时间格式 依次演示 yy yyyy M MM MMM EEEE w dd hh HH z zh en G MT 等时间格式 练习 今天日期格式 5 分钟 以 Tuesday 2014 January 10 09 10 29 GMT 的格式显示当前时间 字段名为 now 提醒 当前时间可以用 current timestamp 函数 5 5 时间函数时间函数 当前时间当前时间 注意 时间函数在不同的数据库中会有不同 以下仅表示本系统的函数 当前时间的函数 current date 当前日期 current time 当前时间 current timestamp 当前日期时间 演示 当前时间 依次演示当前时间的函数 显示它们的差异 select formatdatetime current date yyyy MM dd HH mm ss date formatdatetime current time yyyy MM dd HH mm ss time formatdatetime current timestamp yyyy MM dd HH mm ss datetime 5 6 时间函数时间函数 分解分解 分解函数 1 常用函数 day of year 一年中的第几天 day of month 一月中的第几天 day of week 一周中的第几天 周日是 1 dayname 星期几 monthname 月份 year 年 quarter 季度 month 月 week 周 day 天 hour 小时 minute 分钟 second 秒 2 extract 函数 例如 select extract year from current timestamp 参数可为 year yy month MM week day dd day of year doy hour hh minute mi second ss millsecond ms 演示 时间分解函数 用两种方式分解出当前时间的 年 月 日 小时 分钟 秒 1 用 year month day hour minute second 等函数 select year current date year month current date month day current date day hour current time hour minute current time minute second current time second 2 用 extract 函数 select extract year from current date year extract month from current date month extract day from current date day extract hour from current time hour extract minute from current time minute extract second from current time second 练习 分解时间 5 分钟 从当前时间分解出 今年的第几天 doy 月份全称 month 第几周 week 星期几 dayname 练习 员工星期几聘用 5 分钟 显示员工的姓氏 聘用日期和聘用是星期几 dayname 按照聘用日期在星 期中的顺序 从星期日为 1 开始 排序 提醒 显示星期几用 dayname 函数 排序用 day of week 函数 5 7 时间函数时间函数 计算计算 由于时间是以内置数字格式存储的 实际上可以很轻松的进行计算 1 时间相加 dateadd timestampadd dateadd unitString addInt timestamp 例如 dateadd month 1 date 2014 01 31 2014 02 28 2 时间相减 datediff timestampdiff datediff unitString time1 time2 time2 time1 问题 时间怎么除呢 演示 时间计算函数 1 显示当前时间增加 减少 1 年 1 月 1 天 1 小时的时间 select dateadd year 1 current date addyear select dateadd month 1 current date addmonth select dateadd day 1 current date addday select timestampadd hour 1 current time addhour 2 显示当前时间与 2008 年 8 月 8 日之间相差多少天 select datediff day date 2008 08 08 current date daydiff 练习 时间多次相加 5 分钟 将当前日期增加 1 年又 3 个月又 3 天 注解 可以函数嵌套 5 8 时间函数时间函数 转换转换 时间与字符串之间可以互相进行转换 1 时间转字符串 fotmatdatetime formatdatetime timestamp formatString localeString timeZoneString formatdatetime timestamp 2014 01 01 23 10 20 yyyy MMM dd hh mm ss z zh GMT 2 字符串转时间 parsedatetime parsedatetime string formatString localeString timeZoneString parsedatetime Sat 3 Feb 2001 03 05 06 GMT EEE d MMM yyyy HH mm ss z en GMT 演示 时间转换函数 1 将当前时间显示为 EEE MMM dd yyyy HH mm ss select formatdatetime current timestamp EEE MMM dd yyyy HH mm ss time 2 将 2008 08 08 转换为日期时间 select parsedatetime 2008 08 08 yyyy MM dd 3 将 2 的结果日期以 1 的格式显示出来 select formatdatetime parsedatetime 2008 08 08 yyyy MM dd EEE MMM dd yyyy HH mm ss time 练习 薪资复核日期 20 分钟 显示所有员工的姓氏 聘用日期和薪金复核日期 薪金复核日期是在入职 6 个 月后的当月第二个星期五 提醒 1 6 个月后用 dateadd 2 第二个星期五 要先将年月分解出来 用字符串拼接 然后用 parsedate 转换回日 期 格式需要用到 EEE W 如 prasedatetime 2014 12 Fri 2 yyyy M EEE W en 记得要星期几英文用 en 中文不用 3 parsedate 转换成时间后 会带有小时 分钟等信息 如果不想显示可以用 format datetime 函数 5 9 to char 函数函数 1 使用 to char 函数处理时间 to char value formatString 类似 formatdatetime 函数 如 to char date 2010 01 01 yyyy MMM dd 2 使用 to char 函数处理数字 格式元素如下 9 数字个数 999999 1234 0 前导 0 009999 001234 美元符号 999999 1234 L 当地货币 L999999 1234 小数点位置 99999 99 1234 00 逗号位置 999
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新能源产业技术研发项目合作合同
- 2025年度特色餐饮兼职岗位劳动合同模板
- 2025年度新能源项目购销合同终止执行细则告知函
- 2025年五星级酒店客房环保装修及智能控制系统改造合同
- 2025年重型卡车租赁税务合规与申报服务合同
- 羊毛衫品牌授权与市场推广服务合同
- 2025年绿色节能小区消防水池及消防泵房改造工程合同
- 2025年二手车交易抵押贷款合同:车辆评估及利率变动保障条款
- 2025年度国际集装箱运输合同:印花税缴纳与高效清关一体化服务协议
- 水资源管理:成功与创新
- 2024中华人民共和国文物保护法详细解读课件
- 学校维修维护合同模板
- 设备安装应急应对预案
- 民事诉讼委托书
- 初中一年级思维逻辑训练数学题300道附答案
- 医疗机构医疗废物暂存间消毒记录表
- JT-T-617.6-2018危险货物道路运输规则第6部分:装卸条件及作业要求
- DL-T5372-2017水电水利工程金属结构与机电设备安装安全技术规程
- 新时代高职英语(基础模块)Unit1 -2
- 糖尿病患者延续性护理的研究进展
- FZT 95032-2021 长环蒸化机行业标准
评论
0/150
提交评论