1. 6天以内的记录
Oracle:
select *
from WSSP_ORDER_MAIN
where ROUND(TO_NUMBER(SYSDATE - ORDER_DATE_))<=6;
注:TO_NUMBER 转化为数字,此处将日期差转为为数字,并用round方法进行四舍五入。如果想要精确到分秒,直接乘以数字就行。
300秒以内的记录
select *
from WSSP_ORDER_MAIN
where ROUND(TO_NUMBER(SYSDATE - ORDER_DATE_)*24*60*60)<=300 );
MySQL:
select *
from wssp_order_main
where DATEDIFF(NOW(),ORDER_DATE_)<=6;
注:DATEDIFF() 函数返回两个日期之间的天数,比较级别到天。如果要精确到分秒,这个DATEDIFF()函数无法满足,需要用到TIMEDIFF()函数。
select *
from wssp_order_main
where TIME_TO_SEC(TIMEDIFF(NOW(),ORDER_DATE_))/60/60/24 <=6;
注:TIMEDIFF() 函数返回两个日期之间的time差值,如08:08:08。TIME_TO_SEC() 函数将time值转化为秒。
SQLServer:
select *
from stone.WSSP_ORDER_MAIN
where DateDiff(hh,ORDER_DATE_,getDate())<=6;
2. 日期与时间拼接成完整时间,并和当前日期比较
Oracle:
select T1.*
from WSSP_ORDER_MAIN t1
where to_date(CONCAT(CONCAT(to_char(T1.SAILING_DATE_,'yyyy-MM-dd'),' '),T1.SAILING_TIME_),'yyyy-mm-dd,hh24:mi:ss') <= SYSDATE;
注:to_char将日期转换成字符串,也是用CONCAT函数拼接字符串。最后用to_date将字符串转化为日期。
MySQL:
啥时候用到这条语句,当日期和时间分别存到2个字段,但需要合起来和当前日期比较
select t1.*
from wssp_order_main t1
where str_to_date(CONCAT(CONCAT(date_format(t1.SAILING_DATE_,'%Y-%m-%d'),' '),t1.SAILING_TIME_),'%Y-%m-%d %H:%i:%s') >= NOW();
注:date_format 将日期格式转化为字符串,目前我的time字段在数据库是字符串。前后都是字符串,再用CONCAT函数,拼接字符串。拼接好了,再用str_to_date将字符串转换为日期类型。
3.Oracle==查找记录中PLAN_BERTH_ID_ 重复的记录
SELECT *
FROM TIC_TICKET
WHERE PLAN_BERTH_ID_ IN (SELECT PLAN_BERTH_ID_ FROM TIC_TICKET GROUP BY PLAN_BERTH_ID_ HAVING COUNT(*)> 1)
4.Oracle==向表中添加字段
alter table WSSP_ORDER_DETAIL
add TIC_TICKET_ID_ number(10);
5.SQLServer==剩余时间"XX天XX小时XX分"
<pre class="sql" name="code">select cast(floor(datediff(minute,时间1,时间2) / 1440) as varchar)+'天'+
cast(floor((datediff(minute,时间1,时间2) % 1440)/60) as varchar)+'小时'+
cast(((datediff(minute,时间1,时间2))-
(floor(datediff(minute,时间1,时间2) / 1440) *1440)-
(floor((datediff(minute,时间1,时间2) % 1440)/60)*60)) as varchar)+'分'
from 表名