MONTH(date) 返回date的月份,范围1到12。
MINUTE(date) 返回date的分钟,范围是0到59。
返回月份匹配的结果集
SELECT *
FROM tableA
WHERE EXTRACT(MONTH FROM NOW( )) =
EXTRACT(MONTH FROM logtime)
SELECT *
FROM tableA
WHERE MONTH(NOW( )) =
MONTH(logtime)
返回分钟匹配的结果集
SELECT *
FROM tableA
WHERE EXTRACT(MINUTE FROM NOW( )) =
EXTRACT(MINUTE FROM logtime)
SELECT *
FROM tableA
WHERE MINUTE(NOW( )) =
MINUTE(logtime)
你可以用年和月一起比较啊,去年,前年都不成问题,你原来问题没有说清楚前提和背景。
想查x个月以前的信息
if当前月<=x
SELECT *
FROM tableA
WHERE MONTH(logtime) <=(12-x+MONTH(NOW( ))) AND YEAR(logtime)<YEAR(NOW())
else
SELECT *
FROM tableA
WHERE MONTH(logtime) <=(MONTH(NOW( )-x) AND YEAR(logtime)<=YEAR(NOW())
在date的分钟上加上x分钟: DATE_ADD(date,INTERVAL x MINUTE)
MYSQL中也有DATEDIFF函数
DATEDIFF(expr,expr2)
DATEDIFF() 返回起始时间 expr和结束时间expr2之间的天数。Expr和expr2 为日期或 date-and-time 表达式。计算中只用到这些值的日期部分
很明显和MSSQL里的datefiff形同神异,并没有过多的参数,只能比较天的差别。
所以在MySQL要加上自己的处理才行。
year(), month(), concat() 是 mysql 特有的函数,其他数据库也有对应的函数,而 hibernate 存在的意义就是屏蔽这些数据库特有的东西,这样的话:如果数据库的 datetime/date 之类的字段并没有和 Java 的 Date 或 Calender 属性进行映射的话,无论你使用 HQL 还是Criteria 都无法实现对日期的 *** 作,因为 HQL 和 Criteria 都是基于对象的查询方式。
基于对象的查询,如下,先做映射
@Entity
@Table(name="PREFERRED_CUSTOMER")
public PCustomer {
@Column(name = "EXPIRATION_DATE")
@Temporal(TemporalType.DATE)
protected java.util.Date expirationDate// only day, month, year
}
可以使用 HQL 这么查询:
List<PCustomer>list = session
.createQuery("from PCustomer pc where pc.expirationDate = :edate")
.setParameter("edate", new java.util.Date(), TemporalType.DATE)
.list()
hibernate 屏蔽了数据库特有的东西,是为了方便移植,但有的老项目较多地使用了数据库特有的东西,如MSSQL 的 T-SQL,这时,就需要使用 hibernate 对 SQL 的原生支持,Session 提供了 createSQLQuery() 这样的方法,此时的 hibernate 就相当于一个简单的 mapper,只提供对象关系映射,当然,一旦你在代码中使用了对 SQL 的原生支持,移植性就不好了。
此种方式可以使用你所说的 MySQL 函数
从日期减去指定的时间间隔。
语法
DATE_SUB(date,INTERVAL expr type)
date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
type 参数可以是下列值:
Type 值
MICROSECOND 微秒
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER 季度
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
假如我们要找出表中10分钟内插入的数据可以用语句:
select * from call_record where
insert_time >= date_sub(now(),interval 10 minute)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)