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 TOP 10 * FROM table | select * from table WHERE … LIMIT 10; #返回前10行
select * from table WHERE … LIMIT 0,10; #返回前10行 |
绝对值 | 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 least(1,-2,4,3) value from dual |
select min(value) value from |
|
处理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 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 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; //日期转化为字符串 日期+ 1 年 SYSDATE + INTERVAL '1' YEAR 如果计算的是DATE类型,我们还可以采用如下的方式。 select (date '2015-04-10' - date '2014-03-11') from dual ddd 年中的第几天 select to_char(sysdate,'yyyy') from dual; --年 |
select convert(nvarchar(MAX), getdate(), 20); '2018-09-26 15:44:10' SELECT * FROM tablename WHERE time>='2018/1/1 11:45:00' ORDER BY time DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1 例: DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为 514592 秒 |
select date_format(now(),'%Y-%m-%d %h:%i:%s') as '日期' select date_add(now(), interval 1 day); -- add 1 day select datediff('2008-08-08', '2008-08-01'); -- 7 |
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为非法输入,不能匹配。