【发布时间】:2021-09-22 16:57:20
【问题描述】:
例如,我的系统中有一个 MySQL 表(sample_table)
| Name | column_value | frequency |
|---|---|---|
| AAA | 08/24/2020 12:23:10 | -6 |
| BBB | 09/24/2020 12:23:10 | -5 |
| ABC | 10/23/2027 12:23:10 | -3 |
| DBC | 01/08/2016 12:23:10 | -1 |
我想根据 column_value 列按排序顺序创建一个选择查询。
column_value 列是 varchar 类型。
我想使用这个查询来获取结果集。
select * from sample_table order by str_to_date(column_value, '%m/d%/%Y');
我正在使用 JPA。
TypedQuery<?> buildCriteriaQuery(Class<?> clazz, Class<?> resultClass, String... columnsToSelect) {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
if (resultClass == null) {
resultClass = clazz;
}
CriteriaQuery<?> criteriaQuery = criteriaBuilder.createQuery(resultClass);
Root<?> root = criteriaQuery.from(clazz);
## I want to add orderby criteria using criteriaBuilder
Path<Object> columnValue = root.get("columnValue");
javax.persistence.criteria.Expression<String> timeStr = criteriaBuilder.function("STR_TO_DATE", String.class, columnValue, criteriaBuilder.literal("'%m/%d/%Y %r'"));
criteriaQuery.orderBy(criteriaBuilder.asc(timeStr));
TypedQuery<?> executableQuery = entityManager.createQuery(criteriaQuery);
return executableQuery;
}
但我遇到了异常
原因:org.h2.jdbc.JdbcSQLException:找不到函数“STR_TO_DATE”; SQL 语句: 选择 valfq0_.name 作为名称,valfq0_.COLUMN_VALUE 作为 column_v5_15_,valfq0_.frequency 作为 value_fr6_15_ 从 STR_TO_DATE(valfq0_.COLUMN_VALUE,?) asc limit 的顺序中选择? [90022-197]
我想知道有没有办法在 orderby 语句中实现 str_to_date 转换。 **注意:** 我的 JPA 查询是针对 MySql 数据库的。
【问题讨论】:
标签: java mysql hibernate jpa criteria