① oracle的表里有date类字段,如何查询时截取年份
oracle中的date类型字段,截取年份可用to_char函数。
工具:oracle 10g
步骤:
1、如emp表中有hiredate字段为date类型的数据。
② 用 oracle 写一个 sql语句 查询上一个月的最大日期,
首先获取本月第一点trunc(sysdate,'mm');这个是获取本月第一天的时间,然后-1就是上个月最后一天,然后输出日期to_char(date,'DD');
最后SQL
select to_char(trunc(sysdate,'mm')-1,'DD') from al;
③ oracle-sql如何查出:一段时间内(输入时间区间),某数据,连续7天内出现5天及以上
我的大概想法和思路(本人无环境,所有内容都是臆想出来的,没办法测试)
(1)分组,因为是只要连续7天内5天即可,每天的次数并不重要,所以按照(人名和日期(不是时间是日期也就是截取到日)分组),这样可以去掉每天重复的次数。
(2)分好组后的内容,按照人名和日期排序。这样也就是说所有张三的都在一起,李四的都在一起,而且每个人的都是按照日期排序的。(这步其实不做也可以,因为下面的lead函数本身也可以分组排序,不过这样说对你来说更直观一些)
(3)利用lead函数(就是查某行数据的下几行的函数,可能你没有用过,我用的次数也不多。)往下查4行。
这个就是出现了5次,因为:四行+本身=5次,只要证明这5次发生在7天内就可以了。
(4)所以最后一步就是利用lead的列-原来的时间列小于等于6就可以了,只要小于等于6,那么就符合条件(因为相减为7那么是8天,所以要相减为6),就输出。
我按照你给的数据,大概写一个,不一定能用(什么转换之类的我都没写,所以基本肯定不能直接用),不过意思你大概应该能明白。
seelct * from
(select a.人名,a.日期,lead(a.日期,4,null)over(partition by 人名 order by q.日期) 五次后的日期 from
(select 人名,trunc(时间,'dd')日期 from table geoup by 人名,trunc(时间,'dd')) a
) b where b. 五次后的日期-b.日期<=6
大概就是这么个意思。
第二步select查出来的内容,应该类似
张三 2001-10-1 2001-10-7
张三 2001-10-2 null(按照现有的数据来说就是null,这样就不能说是出现了5天了)
同样下面的张三也都是null
李四 2001-10-4 2001-10-10
李四 2001-10-6 2001-10-11
李四 2001-10-8 2001-10-12
④ 在ORacle中怎么截取时间字段中的小时
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from al; //日期转化为字符串
select to_char(sysdate,'yyyy') as nowYear from al; //获取时间的年
select to_char(sysdate,'mm') as nowMonth from al; //获取时间的月
select to_char(sysdate,'dd') as nowDay from al; //获取时间的日
select to_char(sysdate,'hh24') as nowHour from al; //获取时间的时
select to_char(sysdate,'mi') as nowMinute from al; //获取时间的分
select to_char(sysdate,'ss') as nowSecond from al; //获取时间的秒
⑤ 大神们,ORACLE SQL如何截取如2月15到4月20日的日期,找到的一个SQL语句只能显示某一月,急求~
select to_date(´0214´,´mmdd´)+rownum
from al
connect by rownum<to_date(´0420´,´mmdd´)-to_date(´0214´,´mmdd´)
⑥ 数据库中截取时间前八位sql怎么写
--类型是date
select trunc(date,'yyyymmdd') from table_name;
--类型是字符串
select to_char(date,'yyyymmdd') from table_name;
⑦ oracle从含有日期和其他信息的字符串中提取日期的sql语句
selectto_date(REGEXP_replace('2009年6月28日张三从李四那里买的二手车','(d{3,4})年(d{1,2})月(d{1,2})日.+','1/2/3'))"date"fromal
⑧ 怎么在Oracle中将时间戳转化为日期格式
oracle中,日期转换函数有很多,常用命令如下:
to_char()命令将时间戳转换为用户规定的日期格式,如:
SELECT TO_CHAR(sysdate,'YYYY-MM-DD hh24:mi:ss') FROM DUAL;
语法:TO_CHAR(X [,format])
说明:将X按format格式转换成字符串。X可以是日期或者数字或时间戳,format是一个规定了X采用何种格式转换的格式字符串
to_date()命令可以将一个日期格式的字符串转换成date类型数据,如:
SELECT TO_DATE('2014-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') FROM DUAL;
语法:TO_DATE(C [,format])
说明:将符合format指定的特定日期格式的字符串C转换成DATE类型的数据
TO_TIMESTAMP()函数可以将一个时间格式的字符串转换成时间戳
SELECT TO_TIMESTAMP('2014-06-20 12:11:11','YYYY-MM-DD HH24:MI:SS') from al;
语法:TO_TIMESTAMP(C [,format])
说明:将字符串C转换为一个时间戳数据类型
---to_char()命令可以将时间戳转换成字符串:
select to_char( TO_TIMESTAMP('2014-06-20 12:11:11','YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') from al;
当需要进行两个日期的比较时,不需要比较时间,可采用trunc()命令来截取日期
SQL> select to_char( trunc(sysdate), 'YYYY-MM-DD HH24:MI:SS') from al;
SQL> select to_char( sysdate, 'YYYY-MM-DD HH24:MI:SS') from al;
比较两句的运行结果,可以看到差别。
⑨ 求一个Oracle的SQL语句,获取10分钟内唯一的数据
select lasttime,cardid- interval '10' MINUTE from Test
union all
select lasttime,cardid+ interval '10' MINUTE from Test;
结果:
SQL>2011/05/01 11:53:29 1001
2011/05/01 11:56:29 1000