【问题标题】:How convert a string value to number - Hibernate如何将字符串值转换为数字 - Hibernate
【发布时间】:2017-06-09 12:20:21
【问题描述】:

我需要连接2个列并将值转换为数字,上面是代码:

SELECT T FROM TABLE T WHERE CAST(substring(replace(T.versionSince, '.', ''), 1, 1)+'.'+substring(replace(T.versionSince, '.', ''), 2) as  DOUBLE) <= :version

Hibernate 可以做到吗?

【问题讨论】:

    标签: hibernate jpql


    【解决方案1】:

    可以concat和convert,也可以substring,但是不能replace:

    更新

    你的演员应该是这样的:

    cast(
         (concat(
                  substring(u.firstName,1,locate('.', u.firstName))
                  , concat(
                            substring(
                                      u.firstName
                                      ,1+locate('.', u.firstName, locate('.', u.firstName))
                                      ,locate('.', u.firstName, 1+locate('.', u.firstName, locate('.', u.firstName)))- (1+locate('.', u.firstName, locate('.', u.firstName)))
                                     )
                           , substring(
                                       u.firstName
                                       , 1+locate('.', u.firstName, 1+locate('.', u.firstName, locate('.', u.firstName)))
                                       , length(u.firstName)
                                      )
                           )
                 )
          ) as float
        )
    

    另外:

    • 这适用于像这样的字符串:“1.2.3”
    • cast(.. as float).. 您可能需要使用“double”、“real”或“numeric”,具体取决于您的基础数据库
    • 如果您在某些行上碰巧有一点不同的格式,那么您可以使用我的查询的变体..
    • 底线是你不能在 hql 中使用 REPLACE。这样的功能不存在。你必须使用 SUBSTRING 和 LOCATE 的组合。它不像 REPLACE 那样容易,但如果你付出努力,你可以成功。

    【讨论】:

    • 但是我需要删除删除点,我可以保留第一个点,因为我的版本号需要是双倍的。
    • 举个例子
    • 我有 2 列带有 '1.2.3' 和 '1.2.5' 我需要将两者都转换为 ro 与 1.20(双精度或十进制)进行比较
    • 我已经更新了帖子。它将使用“1.2.3”格式 - 类似条目。试试看
    • 但是hibernate中不存在函数转换,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多