1 你用30补充日的信息,如果是二月怎么办,就报错了。
2 当前时间不需要这么复杂TO_DATE(to_char(TRUNC(SYSDATE),'yyyy/mm/dd'), 'yyyy/mm/dd')
TRUNC(SYSDATE) 即可
3 个人理解,你的年、月 字段 应该是数字类型吧,那么一个先转换(如果是字符,则不需转换):
TO_DATE(to_char(Dplan_year) || '/' || to_char(Dplan_month) || '/30', 'yyyy/mm/dd')
我给你一个思路:
当前日期 - (某年某月 第一日 + 1月 - 1日)
其中: 某年某月 第一日 + 1月 即下一月的第一天; 再 -1日 就是某年某月的 最后一天:
select from M_PLAN_INFO D WHERE TRUNC(SYSDATE) - (add_months(TO_DATE(to_char(Dplan_year) || '/' || to_char(Dplan_month) || '/30', 'yyyy/mm/dd'),1) - 1 ) > 30
惯例,在等号左边尽量不要有对字段的运算,所以一般用法有:
1、判断其是否在某个日期区间:
Where CheckDate Between '2013-01-01' And '2013-01-31'
这个方法也可用于加几天是多少,或减几天是多少:
把起迄日期参数化,原CheckDate要加的,那就变成@BeginDate加,减也同理~
2、判断其是否大于某天:
Where CheckDate >'2013-01-01' 或大于等于:Where CheckDate >='2013-01-01'
小于某天
Where CheckDate <'2013-01-01' 或小于等于:Where CheckDate <='2013-01-01'
3、判断其是否等于某天:
如果Check字段不带时间,只是年月日,那直接等于就可以了;
Where CheckDate ='2013-01-01'
如果CheckDate字段是携带时间的就会有差别;这一点,在上述所有方法中都需要注意
eg:CheckDate 实际存储值可能是: 20130101 08:50:54:000 或 20130101 22:50:54:000
这时直接用上面的等号是抓不到的,因此或改写成:
Where CheckDate >= '2013-01-01' And CheckDate < '2013-01-02'
当然也可以把'2013-01-01',定义为参数@Date DateTime
Where CheckDate >= @Date And CheckDate < @Date+1
不建议在等号左边使用函数或计算对表字段进行计算。
以上是两个日期的判断,另外有些日期处理函数可以了解一下:
DATEDIFF ( datepart , startdate , enddate )
返回指定的 startdate 和 enddate 之间所跨的指定 datepart 边界的计数(带符号的整数)。
eg:
Select DateDiff(DAY,'20130101','20130105')
1号到5号相差4天,输出结果为4
常用的datepart 有:
datepart 缩写
year yy, yyyy 年
month mm, m 月
day dd, d 日
week wk, ww 周
hour hh 时
minute mi, n 分
second ss, s 秒
DATEADD(datepart, number, date)
将表示日期或时间间隔的数值与日期中指定的日期部分相加后,返回一个新的 DT_DBTIMESTAMP 值。number 参数的值必须为整数,而 date 参数的取值必须为有效日期。
eg:
Select DATEADD(DAY,1,'20130101')
1号加1天就是2号;输出结果为 ‘2013-01-02’
Number可以是负数就变成减几天
DATEADD(datepart, number, date)
将表示日期或时间间隔的数值与日期中指定的日期部分相加后,返回一个新的 DT_DBTIMESTAMP 值。number 参数的值必须为整数,而 date 参数的取值必须为有效日期。
eg:
Select DATEPART(DAY,'20130101')
返回datepart描述的部分,输出结果为 1
sqlserver 的时间在写sql语句的时候不用做转换了
比如:
select from report_maindh where dd>'2009-01-01'
这里dd是数据库的一个日期类型
或者 select from report where dd between '2009-12-01' and '2009-01-01'
当然,这个'2009-01-01'一定和dd里面存储的时间格式一样
不然sql执行会报错
这是在sql中比较时间
如果在java中的话,
lz可以先把数据库中的dd字段按照字符串取出
假如String dd1 = 从数据库中取出的;
String dd2 = 页面输入的;
然后可以按照楼上的方式转换成功日期类型再进行比较
两种办法。
SQL中对比,直接使用getdate()就可以获取数据库服务器的当前时间。
获取数据库系统时间字符串: select CONVERT(varchar, getdate(), 120 )
格式是“yyyy-MM-dd HH:mm:ss”
就可以在代码中转换成日期格式进行对比
SELECT FROM order WHERE user_id=001 AND DATE_FORMAT(time,'%Y-%m-%d')="2014-10-11 "
或者
SELECT FROM order WHERE user_id=001 AND time >= 2014-10-11 AND time < 2014-10-12
如果表的记录较多时,推荐使用第二种的方法。
以上就是关于oracle 数据库时间比较,请高手指点一下!全部的内容,包括:oracle 数据库时间比较,请高手指点一下!、SQL语句中怎样比较两个日期的大小、在查询数据库时怎么这么比较页面(String)传过去的时间和数据库(date)的时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)