2

我正在尝试从旧数据库中检索数据。

表中的列定义为包含帐号的 DECIMAL(13,0)。

无法更改列数据类型,因为它将对遗留系统产生重大影响。基本上所有使用该表的程序都需要更改然后重新编译,这不是一个选项。

我们有一个需求,就是要找到所有账号中包含值的记录,比如用户可以搜索 12345,所有账号中包含 12345 的账号都应该返回。

如果这是一个 CHAR/VARCHAR,我会使用:

criteriaBuilder.like(root.<String>get(Record_.accountNumber), searchTerm)

作为定义为 DECIMAL(13,0) 的列的结果,accountNumber 属性是一个双精度值。

有没有办法在 DECIMAL/double 字段上执行类似的操作?

SQL将是

SELECT * FROM ACCOUNTS WHERE accountNumber LIKE '%12345%'
4

1 回答 1

7

我实际上还没有尝试过,但我相信它应该可以工作

criteriaBuilder.like(
    root.get(Record_.accountNumber).as(String.class),
    searchTerm)

这应该生成一个类似这样的查询:

SELECT * FROM ACCOUNTS WHERE CAST(accountNumber AS text) LIKE '%12345%'
于 2017-04-25T07:25:16.927 回答