oracle与sqlserver的区别

  Oracle  sqlserver  mysql 
sql语法  PLSQL  TSQL   
 数据库模式 基于表空间和用户对访问表进行操作和控制  基于数据库,用户,数据库对其进行控制和操作   
 jdbc连接

jdbc:url=jdbc:oracle:thin:@127.0.0.1:1521:test

jdbc:url=jdbc:oracle:thin:@IP:port:SID(如果是服务名许将:改为/) 

jdbc:url=jdbc:oracle:thin:@IP:port/服务名 

 jdbc.url=jdbc:sqlserver://127.0.0.1:1433;databasename=test jdbc.url=jdbc:mysql://127.0.0.1:3306/test 
分页 

select * from
(select t.*,rownum as rowno from TABLE1 t)
where rowno between 10 and 20

 SELECT TOP 10 *  FROM table  select * from table WHERE … LIMIT 10; #返回前10行

select * from table WHERE … LIMIT 0,10; #返回前10行
select * from table WHERE … LIMIT 10,20; #返回第10-20行数据

绝对值 select abs(-1)  value from dual--1 select abs(-1) value   
取值(大)

select ceil(-1.001) vaule from dual --  -1

select ceil(1.001) vaule from dual --2

 select ceiling(-1.001) value-- -1  
取值(小) 

select floor(-1.001) value from dual --  -2

select floor(1.001) value from dual --  1

 select floor(-1.001) value  -- -2

select floor(1.001) value -- 1

 
取整(截取)

 select trunc(-1.002) value from dual  -- -1

select trunc(1.002) value from dual  -- 1

 select cast(-1.002 as int) value -- -1  
四舍五入  select round(1.23456,4) value from dual --1.2346  select round(1.23456,4) value --1.23460  
取随机数  select sys.dbms_random.value(0,1) value from dual;  select rand() value  
求集合最大值  select greatest(1,-2,4,3) value from dual  

select max(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a

 
求集合最小值  select least(1,-2,4,3) value from dual  

select min(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a

 
处理null值  select f1,nvl(f2,10) value from table  select f1,IsNull(f2,10) value from table  
求字符序号  select ascii('a') value from dual --97  

 select ascii('a') value

 
从序号求字符  select chr(97) value from dual  select char(97) value  
连接  select CONCAT(11,22)||33 value from dual(都用||也可)  select '11'+'22'+'33' value  
子串位置  select INSTR('sdsq','s',2) value from dual--3  select CHARINDEX('s','sdsq',2) value--3  
模糊子串的位置   

oracle没发现,但是instr可以通过第四个参数控制出现次数
select INSTR('sdsfasdqe','sd',1,2) value from dual  --6

select patindex('%d%q%','sdsfasdqe') value----返回2,参数去掉中间%则返回7  
求子串  select substr('abcd',2,2) value from dual--bc select substring('abcd',2,2) value--bc  
子串代替  SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual --aijklmnef SELECT STUFF('abcdef', 2, 3, 'ijklmn') value --aijklmnef  
子串全部替换  select Translate('fasdbfasegas','fa','我' ) value from dual --我sdb我segs  无  
长度   length  len,datalength  
大小写转换  lower,upper  lower,upper  
 左补空格(LPAD的第一个参数为空格则同space函数)

select LPAD('abcd',14) value from dual
select LPAD('abcd',14,'0') value from dual--第三个参数默认为空格,右补为RPAD

 
 select space(10)+'abcd' value  
 删除空格  ltrim,rtrim,trim  ltrim,rtrim  
 重复字符串  无  select REPLICATE('abcd',2) value  
 系统时间  select sysdate value from dual  select getdate() value  
 前后几日  直接与整数相加减  直接与整数相加减  
 时间格式 select now();

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期转化为字符串
select to_char(sysdate,'yyyy') as nowYear from dual; //获取时间的年
select to_char(sysdate,'mm')as nowMonth from dual; //获取时间的月
select to_char(sysdate,'dd')as nowDayfrom 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; //获取时间的秒
to_date 同样

日期+ 1 年  SYSDATE + INTERVAL '1' YEAR
日期+ 1 月  SYSDATE + INTERVAL '1' MONTH
日期+ 1 日  SYSDATE + INTERVAL '1' DAY
日期+ 1 时  SYSDATE + INTERVAL '1' HOUR
日期+ 1 分  SYSDATE + INTERVAL '1' MINUTE
日期+ 1 秒  SYSDATE + INTERVAL '1' SECOND
日期+ 1 日1 时1 分SYSDATE + INTERVAL '1 1:1' DAY TO MINUTE

如果计算的是DATE类型,我们还可以采用如下的方式。
DATE+ 1 日  SYSDATE + 1
DATE+ 1 时  SYSDATE + 1/(1*24)
DATE+ 1 分  SYSDATE + 1/(1*24*60)
DATE+ 1 秒  SYSDATE + 1/(1*24*60*60)
DATE+ 1 日1 时1 分SYSDATE + 1 + 1/(1*24) + 1/(1*24*60)

select (date '2015-04-10' - date '2014-03-11') from dual

ddd 年中的第几天
WW 年中的第几个星期
W 该月中第几个星期
D 周中的星期几
hh 小时(12)
hh24 小时(24)
Mi 分
ss 秒

select to_char(sysdate,'yyyy') from dual; --年
select to_char(sysdate,'Q' from dual; --季
select to_char(sysdate,'mm') from dual; --月
select to_char(sysdate,'dd') from dual; --日

 

select convert(nvarchar(MAX), getdate(), 20); '2018-09-26 15:44:10'
Select CONVERT(varchar(100), getdate(), 23);'2018-09-26'
select CONVERT(varchar(12) , getdate(), 112 ) '20180926'
Select CONVERT(varchar(100), getdate(), 24);'15:44:10'
Select CONVERT(varchar(100), getdate(), 8); '15:44:10'

SELECT * FROM tablename WHERE time>='2018/1/1 11:45:00' ORDER BY time
SELECT * FROM tablename WHERE time>='2018-01-01 11:45:00' ORDER BY time

DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1
DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期
DatePart (interval,date)返回日期date中,interval指定部分所对应的整数值
DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称

例:

DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为 514592 秒
DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值为 5 天
DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期一(周日为1,周六为7)
DatePart('d','2005-7-25 22:56:32')返回值为 25即25号
DatePart('y','2005-7-25 22:56:32')返回值为 206即这一年中第206天
DatePart('yyyy','2005-7-25 22:56:32')返回值为 2005即2005年

 

select date_format(now(),'%Y-%m-%d %h:%i:%s') as '日期'
select count(*) from table where time >='2018-04-13 16:55:00'

select date_add(now(), interval 1 day); -- add 1 day
select date_add(now(), interval 1 hour); -- add 1 hour
select date_add(now(), interval 1 minute); -- ...
select date_add(now(), interval 1 second);
select date_add(now(), interval 1 microsecond);
select date_add(now(), interval 1 week);
select date_add(now(), interval 1 month);
select date_add(now(), interval 1 quarter);
select date_add(now(), interval 1 year);

select datediff('2008-08-08', '2008-08-01'); -- 7
select datediff('2008-08-01', '2008-08-08'); -- -7
select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); -- 08:08:08
select timediff('08:08:08', '00:00:00'); -- 08:08:08
注意:timediff(time1,time2) 函数的两个参数类型必须相同。

Oracle 时间函数 SYSDATE

加法

select sysdate,add_months(sysdate,12) from dual; --加1年
select sysdate,add_months(sysdate,1) from dual; --加1月
select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期
select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual; --加1天
select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --加1小时
select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1分钟
select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1秒

减法

select sysdate,add_months(sysdate,-12) from dual; --减1年
select sysdate,add_months(sysdate,-1) from dual; --减1月
select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual; --减1星期
select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual; --减1天
select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --减1小时
select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1分钟
select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1秒

sysdate与to_char()

yyyy 年
Q  季
mm 月
dd 日
day 星期
ddd 年中的第几天 
WW 年中的第几个星期 
W 该月中第几个星期 
D 周中的星期几 
hh 小时(12) 
hh24 小时(24) 
Mi 分 
ss 秒 

select to_char(sysdate,'yyyy') from dual; --年
select to_char(sysdate,'Q') from dual; --季
select to_char(sysdate,'mm') from dual; --月
select to_char(sysdate,'dd') from dual; --日

trunc()函数简介:用于截取时间或者数值,返回指定的值。

语法
1)日期处理:TRUNC(date,[fmt])
   date 为必要参数,是输入的一个date日期值
   fmt 参数可忽略,是日期格式,缺省时表示指定日期的0点。
2)数值处理:TRUNC(number,[decimals]) 
   number 为必要参数,是输入的一个number数值
   decimals 参数可忽略,是要截取的位数,缺省时表示截掉小数点后边的值。 

处理日期

select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'),
       to_char(trunc(sysdate), 'yyyy-mm-dd hh24:mi:ss')
  from dual t;
 
--年
select trunc(sysdate, 'yy') "当年第一天" from dual;
select trunc(sysdate, 'yyyy') "当年第一天" from dual;
select trunc(sysdate, 'year') "当年第一天" from dual;
--季度
select trunc(sysdate, 'q') "当前季度的第一天" from dual;
select trunc(add_months(sysdate,3), 'Q') -1/24 "这个季度最后一天23点" from dual; 
--月
select trunc(sysdate, 'mm') "当月第一天" from dual;
select trunc(sysdate, 'month') "当月第一天" from dual;
select trunc(last_day(sysdate)+1) "下个月第一天的0点" from dual;
select trunc(add_months(sysdate,1),'mm') "下个月第一天的0点"from dual;  
select last_day(sysdate) "当月最后一天" from dual; 
--周 
select trunc(sysdate, 'd') "本周的第一天,周日起" from dual; 
select trunc(sysdate,'day') "本周的第一天,周日起" from dual; 
select next_day(TRUNC(SYSDATE ), 'TUESDAY' ) + 12/24 "下个星期二中午12点" from dual; 
select TRUNC(LEAST(NEXT_DAY(SYSDATE, 'SATURDAY'), NEXT_DAY(SYSDATE, 'SUNDAY'))) + (6*60+10)/(24*60) "下个周六日早上6点10分" from dual; 
--天 
select trunc(sysdate+1) "今晚12点" from dual; 
select trunc(sysdate+1) + (8*60+30)/(24*60) "明天早上8点30分" from dual;
select trunc(sysdate) + 0.99999 "得到这天的最后一秒" from dual;  
--时 
select trunc(sysdate, 'hh')"当前小时" from dual; 
select trunc(sysdate, 'hh24') "当前小时" from dual; 
select trunc(sysdate) + 1/24 "当前日期1点" from dual;
select trunc(sysdate) + 7/24 "当前日期7点" from dual;
--分 
select trunc(sysdate, 'mi') "当前分钟" from dual; 
select trunc(sysdate,'mi') + 10/ (24*60) "10分钟后的时间"from dual; 
--秒 
select sysdate + 10/(24 * 60 * 60) "10秒钟后" from dual;--trunc没有精确到秒的精度
--得到一年的每一天
select trunc(sysdate,'yyyy')+ rn -1 date0
from (select rownum rn from all_objects
where rownum<366)
--判断某一日子所在年分是否为润年
select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','闰年','平年') from dual; 

处理数值

--123.56,将小数点右边指定位数后面的截去; 
select trunc(123.567,2) from dual;
--100,第二个参数可以为负数,表示将小数点左边指定位数后面的部分截去,即均以0记;
select trunc(123.567,-2) from dual;
--123,默认截去小数点后面的部分;
select trunc(123.567) from dual

  字符串转为日期

select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual   //显示:2021-04-12 13:15:20

select to_date('2021-04-12,13:59:59','yyyy-mm-dd,hh24:mi:ss') from dual //显示:2021-04-12 13:59:59

而如果把上式写作:select to_date('2021-04-12,13:59:59','yyyy-mm-dd,hh:mi:ss') from dual,则会报错,因为小时hh是12进制,13为非法输入,不能匹配。

所有博客均为自己学习的笔记。如有错误敬请理解。
原文地址:https://www.cnblogs.com/tangtang-benben/p/14510072.html