2017-01-24 22 views
1

我需要Concat的2个colunms和值转换为数字,它上面是代码:如何转换为字符串值数 - 休眠

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

有可能接触Hibernate的人呢?

回答

0

可以Concat的和转换,也可以串,但不能代替:

更新

这是你的施法看起来应该像:

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”
  • 演员表(.. as float)..根据您的基础数据库,您可能需要使用'double','real'或'numeric'
  • If你碰巧在某些行上有一些不同的格式,那么你有玩我的查询变化..
  • 底线是,你不能在hql中使用REPLACE ..这样的功能不存在..你有使用SUBSTRING和LOCATE的组合。它不像使用REPLACE那样容易,但如果你付出努力,你可以把它关掉。
+0

但是我需要删除删除点,我只是可以保留第一个点,因为我的版本号需要加倍。 –

+0

给我一个例子 –

+0

我有'1.2.3'和'1.2.5'2列我需要转换两个ro比较1.20(双或十进制) –