MySQL的JPA查询中的LPAD字符串函数?

时间:2013-04-16 15:06:56

标签: jpql

我是否知道如何将以下MySQL SQL转换为JPA查询?

SELECT * FROM ORDER
WHERE LPAD(BATCH, 2, ' ') < LPAD('X', 2, ' ') ;

我无法弄清楚的是JPA中的LPAD()字符串函数。

你有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在EclipseLink 2.1中,有一个函数FUNC用于调用数据库特定的函数,例如:

FUNC('LPAD', BATCH, 2, ' ') < FUNC('LPAD', 'X', 2, ' ')

从EclipseLink 2.4和JPA 2.1中,FUNCTION运算符具有相同的功能

答案 1 :(得分:0)

我知道那是一个很老的帖子,但是当一些同事在构建如何执行相同操作的JPA查询时,我总是受到我的质疑。 几乎永远不会找到完美的拟合函数来执行您想要的操作。但是,使用某些逻辑,可以在完整的JPA中获得相同的结果。

LPAD的示例。

Expression<String> numberWithZeroLeft = builder.concat("0000", root.get("myNumber")); //Return something like 000012
Expression<Integer> expressionLength = builder.length(numberWithZeroLeft);
Expression<String> numberLpad = builder.substring(numberWithZeroLeft, e.builder.sum(expressionLength, -3), e.builder.literal(4)); //Return something like 0012

query.select(numberLpad);

请考虑以下内容:

I have a string X, and need a string formatted in 4 zeros.
So we will get 0000 + X => "0000X"
And now just get the 4 last characters using substring.

我希望能帮助别人。

干杯。 =]