SQL标准语言内容大全(5)

2019-01-19 12:57

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、GMT等时间格式。

练习-今天日期格式 (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转换成时间后,会带有小时、分钟等信息,如果不想显示可以用formatdatetime函数。

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,999 --> 1,234 ...

演示-to_char

演示用to_char函数处理日期、数字。

1、日期select to_char(date '2013-01-05','DD Month yyyy') datestr; 2、数字

select to_char(1234, '$099,999.00') salary;

练习-预期工资

(10分钟)用to_char函数显示所有员工的姓氏、工资、预期工资(dream),预期工资为3倍的现有工资,工资和预期工资都要求格式为\¥***,***.00\(人民币符号开头,两位小数、每三位一个逗号),另外显示聘用日期(hire_date),要求格式为\年 一月 星期三\。

5-10常规函数

这些函数可以使用任何数据类型,并且可以使用空值。 1、nvl(expr1, expr2):

如果expr1为空值,则返回expr2,否则返回expr1,例如

nvl(commission_pct, 0); 没有提成的员工,显示0 nvl(hire_date,date '1997-01-01'); 默认聘用日期

nvl(manager_id, '我就是老大'); 没有领导的人,就是老大了

2、nvl2(expr1, expr2, expr3)

如果expr1为非空则返回expr2,否则返回expr3,例如:

nvl2(commission_pct, 'sal+comm', 'comm')

//如果有提成比率,收入是工资加提成,否则只有工资。

3、nullif(A, B):

如果A和B相等,则返回空,否则返回A,例如:

nullif(length(first_name), length(last_name)) //如果名和姓的长度相等则返回空,否则返回名的长度

4、coalesce(A, B, C):

返回A、B、C中第一个不为空的值,例如:

coalesce(commission_pct, salary, 10)

这个函数可以理解成是三个参数的nvl函数。

练习-员工的当前工作

(5分钟)从员工表和岗位历史表关联查询,显示每个员工的姓氏、岗位、历史岗位(如果换过岗位则显示历史岗位,否则显示空)。

5-11 case函数

1、case表达式用来执行if-then-else的分支判断,在h2db中实现了casewhen函数。 casewhen(boolean, A, B) 如果表达式为真则返回A,否则返回B

casewhen(id=1, 'A', 'B')

2、case表达式是可以嵌套使用,比如以下语句:

select last_name,job_id,

casewhen(job_id='IT_PROG', 1.1*salary, casewhen(job_id='ST_CLERK', 1.15*salary, casewhen(job_id='SA_REP', 1.2*salary, salary)) ) revised_salary from hr.employees;

根据岗位执行不同的加薪计划。

演示-个性化加薪计划


SQL标准语言内容大全(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:新人教版一年级语文下册期末字词专项复习题[1]

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: