设为首页 收藏本站
查看: 2200|回复: 0

[经验分享] SQL必备-ORACLE-SQSLSERVER-DB2时间函数及常见函数总结

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-11-4 08:31:43 | 显示全部楼层 |阅读模式
SQLSERVER 时间篇:*************************************************************
一、时间函数
--getdate 获取当前时间
select getdate()

--dateadd 原有时间加: 2013-02-17 13:20:16 此时间加12个月
select dateadd(MONTH,12,'2013-02-17 13:20:16')  --返回:2014-02-17 13:20:16.000  (参数month可以改为 day,year等日期加相应的值)

--datediff 两个时间的差 (后面-前面=返回值)
select datediff(day,'2013-02-01','2013-02-18')   --返回:17  (参数day可以改为 month,year等日期加相应的值)

--datepart 获取日期的某个部分整数
select DATEPART(month, '2013-2-17')  --返回 2    (参数month可以改为 day,year等日期加相应的值)

--datename 获取指定部位的字符串
select datename(weekday, '2013-2-17')  --返回 星期日 (参数weekday可以改为 day,year等日期加相应的值)

--day(), month(),year() 获取指定部位的字符串
select day('2013-2-15') --返回15

二、时间格式转换

    select CONVERT(varchar, getdate(), 120 )  --返回 2013-02-17 13:37:54
    select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','') --返回 20130217133828
    select CONVERT(varchar(12) , getdate(), 111 )  --返回 2013/02/17
    select CONVERT(varchar(12) , getdate(), 112 )  --返回 20130217
    select CONVERT(varchar(12) , getdate(), 102 )  --返回 2013.02.17
    select CONVERT(varchar(12) , getdate(), 101 )  --返回 02/17/2013
    select CONVERT(varchar(12) , getdate(), 103 )  --返回 17/02/2013
    select CONVERT(varchar(12) , getdate(), 104 )  --返回 17.02.2013
    select CONVERT(varchar(12) , getdate(), 105 )  --返回 17-02-2013
    select CONVERT(varchar(12) , getdate(), 106 )  --返回 17 02 2013
    select CONVERT(varchar(12) , getdate(), 107 )  --返回 02 17, 2013
    select CONVERT(varchar(12) , getdate(), 108 )  --返回 13:42:50
    select CONVERT(varchar(12) , getdate(), 109 )  --返回 02 17 2013  
    select CONVERT(varchar(12) , getdate(), 110 )  --返回 02-17-2013
    select CONVERT(varchar(12) , getdate(), 113 )  --返回 17 02 2013 1
    select CONVERT(varchar(12) , getdate(), 114 )  --返回 13:42:24:743

三、时间格式与其他格式转换
   
   将int转换为时间:convert(datetime,left(DATEid,8),101)
   将时间转换为int: year(CreateDate)*10000 + month(CreateDate)*100 + day(CreateDate)
   将时间格式[2014-07-24 10:32:43.197]转换为int20140724:select cast(replace(convert(char(10),GETDATE(),120),'-','') as int)

SQLSERVER 函数篇: *************************************************************

一、字符函数
ascii(字符串表达式)
char(整数表达式)
charindex(字符串表达式 1, 字符串表达式2[,整数表达式])
difference(字符串表达式 1,字符串表达式 2)
left(字符串表达式,整数表达式)
right(字符串表达式,整数表达式)
len(字符串表达式)
lower(字符串表达式)
upper(字符串表达式)
ltrim(字符串表达式)
rtrim(字符串表达式)
patindex(字符串表达式 1,字符串表达式 2)
reverse(字符串表达式)
space(整数表达式)
str(float 型小数[,总长度[,小数点后保留的位数]])
stuff (字符串表达式 1,开始位置,长度,字符串表达式 2)
substring(字符串表达式,开始位置,长度)
replace(字符串表达式 1,字符串表达式 2,字符串表达式 3)
二、数学函数
abs(数值表达式)
cos(浮点表达式)
sin(浮点表达式)
cot(浮点表达式)
ceiling(数值表达式)
floor(数值表达式)
rand([整数表达式])
round(数值表达式[,长度[,操作方式]])
三、日期函数
dateadd(日期部分,数字,日期)
datediff(日期部分,开始日期,结束日期)
datename(日期部分,日期)
datepart(日期部分,日期)
day(日期) month (日期) year (日期)
四、转换函数
convert(数据类型[(长度)],表达式[,样式])
cast(表达式 as 数据类型[(长度)])
getdate()
五、系统和功能函数
select newid()
isnumeric(任意表达式)
isdate(任意表达式)  
----------------------------------------------------------------------------
ORACLE 时间篇:*************************************************************

一、当前时间拆分:
select to_char(sysdate,'yyyy') as nowYear   from dual;   //获取时间的年  
select to_char(sysdate,'mm')    as nowMonth from dual;   //获取时间的月  
select to_char(sysdate,'dd')    as nowDay    from dual;   //获取时间的日
select to_char(sysdate,'day') from dual;  
select to_char(sysdate,'hh24') as nowHour   from dual;   //获取时间的时  
select to_char(sysdate,'mi')    as nowMinute from dual;   //获取时间的分  
select to_char(sysdate,'ss')    as nowSecond from dual;   //获取时间的秒
select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss')    from dual

二、当前时间自身计算:
当前时间减去 7 分钟的时间
select sysdate,sysdate - interval '7' MINUTE from dual
当前时间减去 7 小时的时间
select sysdate - interval '7' hour from dual
当前时间减去 7 天的时间
select sysdate - interval '7' day from dual
当前时间减去 7 月的时间
select sysdate,sysdate - interval '7' month from dual
当前时间减去 7 年的时间
select sysdate,sysdate - interval '7' year from dual  

三、当前时间其他计算:
START_DATE,END_DATE,计算这两个日期的时间差(分别以天,小时,分钟,秒,毫秒):
天:   ROUND(TO_NUMBER(sysdate - START_DATE))
小时: ROUND(TO_NUMBER(sysdate - START_DATE) * 24)
分钟: ROUND(TO_NUMBER(sysdate - START_DATE) * 24 * 60)
秒:   ROUND(TO_NUMBER(sysdate - START_DATE) * 24 * 60 * 60)
毫秒: ROUND(TO_NUMBER(sysdate - START_DATE) * 24 * 60 * 60 * 1000)

四、当前时间转换

时间转换为char:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;   
char转换为时间:
select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual


ORACLE 函数篇: *************************************************************

一、字符函数
lower(char):将字符串转化为小写的格式。
upper(char):将字符串转化为大写的格式。
length(char):返回字符串的长度。
substr(char, m, n):截取字符串的子串,n代表取n个字符的意思,不是代表取到第n个
replace(char1, search_string, replace_string)
instr(C1,C2,I,J) -->判断某字符或字符串是否存在,存在返回出现的位置的索引,否则返回小于1;在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J 出现的位置,默认为1

二、数学函数
round(n,[m]) 该函数用于执行四舍五入
trunc(n,[m]) 该函数用于截取数字。
mod(m,n)取余函数
floor(n) 返回小于或是等于n的最大整数
ceil(n) 返回大于或是等于n的最小整数
abs(n) 返回数字n的绝对值

三、日期函数
sysdate 返回系统时间
add_months函数 可以得到某一时间之前或之后n个月的时间
last_day(d) 返回指定日期所在月份的最后一天

四、转换函数
to_date()函数
to_char()函数

五、系统和功能函数
1)terminal:当前会话客户所对应的终端的标示符,如计算机名
2)language: 语言
3)db_name: 当前数据库名称
4)nls_date_format: 当前会话客户所对应的日期格式
5)session_user: 当前会话客户所对应的数据库用户名
6)current_schema: 当前会话客户所对应的默认方案名
7)host: 返回数据库所在主机的名称



Oracle trunc()函数的用法
/**************日期********************/
1.select trunc(sysdate) from dual  --2011-3-18  今天的日期为2011-3-18
2.select trunc(sysdate, 'mm')   from   dual  --2011-3-1    返回当月第一天.
3.select trunc(sysdate,'yy') from dual  --2011-1-1       返回当年第一天
4.select trunc(sysdate,'dd') from dual  --2011-3-18    返回当前年月日
5.select trunc(sysdate,'yyyy') from dual  --2011-1-1   返回当年第一天
6.select trunc(sysdate,'d') from dual  --2011-3-13 (星期天)返回当前星期的第一天
7.select trunc(sysdate, 'hh') from dual   --2011-3-18 14:00:00   当前时间为14:41  
8.select trunc(sysdate, 'mi') from dual  --2011-3-18 14:41:00   TRUNC()函数没有秒的精确
/***************数字********************/
/*
TRUNC(number,num_digits)
Number 需要截尾取整的数字。
Num_digits 用于指定取整精度的数字。Num_digits 的默认值为 0。
TRUNC()函数截取时不进行四舍五入
*/
9.select trunc(123.458) from dual --123
10.select trunc(123.458,0) from dual --123
11.select trunc(123.458,1) from dual --123.4
12.select trunc(123.458,-1) from dual --120
13.select trunc(123.458,-4) from dual --0
14.select trunc(123.458,4) from dual  --123.458
15.select trunc(123) from dual  --123
16.select trunc(123,1) from dual --123
17.select trunc(123,-1) from dual --120
-------------------------------------------------

DB2:

--获取当前日期: select current date from sysibm.sysdummy1;  
                  values current date;   
--获取当前日期   select current time from sysibm.sysdummy1;
                  values current time;  
--获取当前时间戳 select current timestamp from sysibm.sysdummy1;
                  values current timestamp;   
--要使当前时间或当前时间戳记调整到 GMT/CUT,则把当前的时间或时间戳记减去当前时区寄存器:
         values current time -current timezone;  
         values current timestamp -current timezone;   
--获取当前年份   values year(current timestamp);
--获取当前月     values month(current timestamp);
--获取当前日     values day(current timestamp);  
--获取当前时     values hour(current timestamp);
--获取分钟       values minute(current timestamp);   
--获取秒        values second(current timestamp);  
--获取毫秒      values microsecond(current timestamp);  
--从时间戳记单独抽取出日期和时间  
  values date(current timestamp); 07/24/14
  values VARCHAR_FORMAT(current TIMESTAMP,'yyyy-mm-dd');  
  values char(current date);  2014-07-24-10.46.51.978540
  values time(current timestamp);  10:47:25
--执行日期和时间的计算
  values current date+1 year;  
  values current date+3 years+2 months +15 days;
  values current time +5 hours -3 minutes +10 seconds;   
--计算两个日期之间的天数   
  values days(current date)- days(date('2010-02-20'));   
--时间和日期换成字符串   
  values char(current date);   
  values char(current time);
--要将字符串转换成日期或时间值   
  values timestamp('2010-03-09-22.43.00.000000');
  values timestamp('2010-03-09 22:44:36');   
  values date('2010-03-09');
  values date('03/09/2010');   
  values time('22:45:27');   
  values time('22.45.27');  
  --计算两个时间戳记之间的时差:   
  --秒的小数部分为单位   
  values timestampdiff(1,char(current timestamp - timestamp('2010-01-01-00.00.00')));   --秒为单位
  values timestampdiff(2,char(current timestamp - timestamp('2010-01-01-00.00.00')));   --分为单位
  values timestampdiff(4,char(current timestamp - timestamp('2010-01-01-00.00.00')));   --小时为单位
  values timestampdiff(8,char(current timestamp - timestamp('2010-01-01-00.00.00')));   --天为单位  
  values timestampdiff(16,char(current timestamp - timestamp('2010-01-01-00.00.00')));   --周为单位   
  values timestampdiff(32,char(current timestamp - timestamp('2010-01-01-00.00.00')));   --月为单位   
  values timestampdiff(64,char(current timestamp - timestamp('2010-01-01-00.00.00')));   --季度为单位   
  values timestampdiff(128,char(current timestamp - timestamp('2010-01-01-00.00.00')));   --年为单位   
  values timestampdiff(256,char(current timestamp - timestamp('2010-01-01-00.00.00')));

  将时间转换为int:CAST(TO_CHAR(IN_DATE,'YYYYMMDD') AS INT) AS DATEID

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-27002-1-1.html 上篇帖子: rman备份,crontab计划任务没有生成备份文件 下篇帖子: Oracle数据库运行时rm误删文件的解决方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表