I have a MySQL table(sample_table) in my system for example
| 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 |
I want to create a select query in sorted order based on the column_value column.
column_value column is varchar type.
I want to use this query to get the result set.
select * from sample_table order by str_to_date(column_value, '%m/d%/%Y');
I am using 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;
}
But I am getting exception
Caused by: org.h2.jdbc.JdbcSQLException: Function "STR_TO_DATE" not found; SQL statement: select valfq0_.name as name, valfq0_.COLUMN_VALUE as column_v5_15_, valfq0_.frequency as value_fr6_15_ from order by STR_TO_DATE(valfq0_.COLUMN_VALUE,?) asc limit ? [90022-197]
I wanted to know is there any way to achieve str_to_date conversion in orderby statement. **Note : ** My JPA query is for MySql db.