我ORACLE中的字段名称是:PADDATE,类型是DATE,我发一个字段的例子:
“2008-5-5 15:13:37” ,数据就是这个形式,我要想查时间段内的数据怎么写SQL,
我用 select * from xxx c where c.paddate between '2008-4-5 15:13:37' and '2009-5-5 15:13:37' 类似于这样的语句在PL/SQL 中提示 “文字与格式字符串不匹配”,应该如何写?
“2008-5-5 15:13:37” ,数据就是这个形式,我要想查时间段内的数据怎么写SQL,
我用 select * from xxx c where c.paddate between '2008-4-5 15:13:37' and '2009-5-5 15:13:37' 类似于这样的语句在PL/SQL 中提示 “文字与格式字符串不匹配”,应该如何写?
在SQL Server 里的日期数据,我们经常可以用 字段<=’2008-5-20’这样的表达式,但在oracle却不可以,因为数据类型不一样 字段是date型,’2008-5-20’是字符型,需要用to_char 或者to_number转换成相同的类型才能进行比较。
刚开始这让我觉得不习惯,觉得不好,不过时间长了,觉得也有不少便利之处,尤其是配合trunc啊,to_char之类的,下面简单写一下常用的一些对日期的操作
SELECT SYSDATE FROM DUAL 取当前系统时间
Select trunc(sysdate) from dual 取当前日期
Select trunc(sysdate,’MM’) from dual 取当前月的第一天
Select trunc(sysdate,’YYYY’) from dual取当年的元旦
Select to_char(sysdate,’ss’) from dual取当前时间秒部分
Select to_char(sysdate,’mi’) from dual取当前时间分钟部分
Select to_char(sysdate,’HH24’) from dual取当前时间秒小时部分
Select to_char(sysdate,’DD’) from dual取当前时间日期部分
Select to_char(sysdate,’MM’) from dual取当前时间月部分
Select to_char(sysdate,’YYYY’) from dual取当前时间年部分
Select to_char(sysdate,’w’) from dual取当前时间是一个月中的第几周(从1日开始算)
Select to_char(sysdate,’ww’) from dual取当前时间是一年中的第几周(从1.1开始算)
Select to_char(sysdate,’iw’) from dual取当前时间是一年中的第几周(按实际日历的)
Select to_char(sysdate,’d’) from dual取当前时间是一周的第几天,从星期天开始,周六结束
Select to_char(sysdate,'day') from dual 取当前日是星期几,和数据库设置的字符集有关,会输出’Tuesday’
Select to_char(sysdate,'ddd') from dual 当前日是一年中的第几天Select Add_months(sysdate,12) from dual 取一年后的今天Select sysdate-(sysdate-100) from dual 取两个日期之间的天数
Select (sysdate-(sysdate-100))*1440 from dual 取两个日期之间的分钟数
Select (sysdate-(sysdate-100))*1440*60 from dual 取两个日期之间的秒数
Select months_between(sysdate,sysdate-100) from dual 取两个日期间隔的月份
Select last_day(sysdate) from dual 取当前月的最后天
Select next_day(sysdate,’1’) from dual 取当前日之后第一个星期天,里面的’1’表示取星期日,如果今天正好是星期日,则会显示下一个星期日
select *
from xxx c
where c.paddate between to_date('2008-4-5 15:13:37','yyyy-mm-dd hh24:mi:ss')
and to_date('2009-5-5 15:13:37','yyyy-mm-dd hh24:mi:ss')
jin_ok 的也可行,可是效率比较低
select * from 表名 c where to_char(c.paddate,'yyyy/mm/dd hh24:mi:ss')>'"+starTime+"' and to_char(c.paddate,'yyyy/mm/dd hh24:mi:ss') <'"+endTime+"'
select sysdate from dual;
select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;
select to_char(sysdate,'DDD') from dual
select to_char(sysdate,'D') from dual
select to_char(sysdate,'DAY') from dual select to_char(sysdate,'yyyy-mm-dd') from dual; select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh24:mi:ss') from dual;
select '''' from dual;select to_char(sysdate,'SSSSS') from dual;
--从今天零点以后的秒数 <2> ADD_MONTHS 添加月份 得到一个新的日期
select add_months(sysdate,1) from dual; select add_months(sysdate,-1) from dual; select trunc(sysdate)-to_date('20050101','yyyymmdd') from dual;
select add_months(sysdate,12) from dual;
一年以后的今天
select add_months(sysdate,-12) from dual;
一年以前的今天 trunc(sysdate) 截取年月日
select sysdate+2 from dual;
数字代表的是天数 两个日期之间的差值代表天数 <3> last_day 某月的最后一天
select last_day(sysdate) from dual;
select add_months(last_day(sysdate)+3,-1) from dual;
本月第3天的日期
<4> months_between 两个日期之间的月数
select months_between(sysdate,'2005-02-01') from dual;
方向 sysdate - '2005-02-01'
select months_between('2005-02-01',sysdate) from dual;
转换函数
to_char 把日期或数字类型变为字符串
select to_char(sysdate,'hh24:mi:ss') from dual;
select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual; select sal,to_char(sal,'L9,999') from emp;
L本地货币
to_number 把字符串变成数字
select to_number('19990801') from dual;
to_date 把字符串变成日期
select to_date('19800101','yyyymmdd') from dual; select to_char(to_date('19800101','yyyymmdd'),
'yyyy"年"mm"月"dd"日"') from dual;