求教MYSQL的日期函数

求教MYSQL的日期函数,第1张

EXTRACT(type FROM date)从date中返回“type”的值。

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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8582523.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存