java—在sql中将varchar转换为数字

xbp102n0  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(426)

谁能帮我把sql中的字符串表示形式的值转换成int吗。例如,我在sql表中有'five'varchar文件,我需要使用sql查询将其转换为5。至少可以只用sql来实现。
是否有可能在criteriaapi中实现它。
主要目标是将所有字符串字段转换为数字表示,并找到每个productid的平均值。
实体:

  1. @Entity
  2. @Table(name = "product_review")
  3. public class ProductReview {
  4. @Id
  5. @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "prod_rev_seq")
  6. private Long id;
  7. @ManyToOne(optional = false)
  8. @JoinColumn(name = "prod_id")
  9. private Product product;
  10. @Enumerated(EnumType.STRING)
  11. private Rating rating;
  12. }
  13. @Entity
  14. @Table(name = "product")
  15. public class Product {
  16. @Id
  17. @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "prod_seq")
  18. @Column(name = "prod_id")
  19. private Long id;
  20. @OneToMany(mappedBy = "product", fetch = FetchType.LAZY,
  21. private Set<ProductReview> productReviews = new HashSet<>();
  22. }
  23. public enum Rating implements JsonDeserializableEnum {
  24. ONE(BigDecimal.ONE, "Horrible", BigDecimal.ZERO, BigDecimal.valueOf(1.5)),
  25. ONE_AND_HALF(BigDecimal.valueOf(1.5), "Poor", BigDecimal.valueOf(1.5), BigDecimal.valueOf(2)),
  26. TWO(BigDecimal.valueOf(2), "Poor", BigDecimal.valueOf(2), BigDecimal.valueOf(2.5)),
  27. TWO_AND_HALF(BigDecimal.valueOf(2.5), "Below average", BigDecimal.valueOf(2.5), BigDecimal.valueOf(3)),
  28. THREE(BigDecimal.valueOf(3), "Average", BigDecimal.valueOf(3), BigDecimal.valueOf(3.5)),
  29. THREE_AND_HALF(BigDecimal.valueOf(3.5), "Average", BigDecimal.valueOf(3.5), BigDecimal.valueOf(4)),
  30. FOUR(BigDecimal.valueOf(4), "Good", BigDecimal.valueOf(4), BigDecimal.valueOf(4.5)),
  31. FOUR_AND_HALF(BigDecimal.valueOf(4.5), "Very good", BigDecimal.valueOf(4.5), BigDecimal.valueOf(5)),
  32. FIVE(BigDecimal.valueOf(5), "Excellent", BigDecimal.valueOf(5), BigDecimal.valueOf(5.5));
  33. }

“五”-5
“三”-3

提前谢谢!

ctrmrzij

ctrmrzij1#

您可以使用@convert annotation在java对象字段和sql字段之间进行转换:

  1. @Enumerated(EnumType.STRING)
  2. @Convert(converter = RatingConverter.class)
  3. private Rating rating;
  1. @Component
  2. @Converter(autoApply=true)
  3. public class RatingConverter extends AbstractAttributeConverter<Rating, Integer> {
  4. @Override
  5. public BigDecimal convertToDatabaseColumn(Rating rating) {
  6. // TODO
  7. }
  8. @Override
  9. public Rating convertToEntityAttribute(Integer dbData) {
  10. // TODO
  11. }
  12. }

您需要在中实现上述2个方法 RatingConverter 根据业务逻辑转换字段。

展开查看全部

相关问题