【问题标题】:Sort table by integer value stored in varchar field按存储在 varchar 字段中的整数值对表进行排序
【发布时间】:2010-12-14 08:58:20
【问题描述】:

我在春季休眠中工作
我的数据库表中有列,类型为VARCHAR,但它存储整数值。所以如果我sort 它使用sqlhqlCriteria(Order.asc),都将其排序为字符串。我需要将它排序为它存储的整数值。在这里我不能改变我的桌子。
无论如何使用Criteria将其排序为整数
对我来说唯一的解决方案是,在将其阅读到某个列表并在我的服务中排序之后?

编辑:我使用MYSQL

谢谢

【问题讨论】:

  • 您可以在数据库中将字符串转换为 int,具体取决于您的数据库。对于 Mysql(例如),您有 convert()cast()

标签: java sql hibernate hql criteria


【解决方案1】:

您可以在排序之前尝试投射它。在 mysql 中,是这样的:

SELECT CAST(myVarcharField AS DECIMAL(10)) as myIntField order by myIntField; 

或作为无符号整数:

SELECT CAST(myVarcharField AS UNSIGNED) as myIntField order by myIntField; 

cast 似乎也是一个有效的HQL expression

【讨论】:

  • 这个查询看起来像原生 sql,在 HQL 或 Criteria 中也可以吗?
  • 它是原生的 mySQL。这个问题确实明确指出它不应该是。
  • 感谢您的重播。有什么方法可以将它与 Criteria 一起使用?
【解决方案2】:

SQL:

SELECT CAST(t.order AS UNSIGNED INTEGER) AS intOrder 
    FROM myTable t ORDER BY intOrder ASC

【讨论】:

  • 感谢您的重播。有什么方法可以将它与 Criteria 一起使用?
猜你喜欢
  • 2017-10-06
  • 1970-01-01
  • 2011-06-08
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 2017-06-10
  • 1970-01-01
相关资源
最近更新 更多