jooq String to Integer conversion

时间:2017-05-17 07:05:26

标签: java sql jooq

我是Jooq的新人。我想将字符串转换为整数。

在表1中定义: -

TableField<?, Integer> city_id;

在表2中定义: -

TableField<?, String> city_id;

在选择查询中。

dsl.select()
   .from(Table1)
   .leftOuterJoin(Table2)
   .on(Table1.city_id.eq(Table2.city_id))
   .fetch();

由于city_id在Table1和TABLE2中的格式不同。因此需要将table2的city_id从String转换为Integer,反之亦然 我试过了           Integer.valueOf(),Integer.parseInt(),无效。

任何帮助表示赞赏。提前谢谢。

2 个答案:

答案 0 :(得分:3)

jOOQ文档(https://www.jooq.org/doc/latest/manual/sql-building/column-expressions/cast-expressions/)描述了function toggleMe(obj, a){ var e=document.getElementById(a); if(!e)return true; e.style.display="block" return true; } function toggleMe2(obj, a){ var e=document.getElementById(a); if(!e)return true; e.style.display="none"; return true; } 的用法,它可以在语句中用于将字段转换为其他类型。

使用您的示例:

  

在表1中定义: -

cast()
  

在表2中定义: -

TableField<?, Integer> city_id;
  

在选择查询中。

TableField<?, String> city_id;

使用强制转换将Integer转换为String的语句:

dsl.select()
   .from(Table1)
   .leftOuterJoin(Table2)
   .on(Table1.city_id.eq(Table2.city_id))
   .fetch();

答案 1 :(得分:2)

理想解决方案:CAST()

Koshux提供了一个很好的答案,您可能应该使用它,因为明确地转换类型不会让转换成偶然。你可以选择自己:

  • 数字列将强制转换为字符串类型
  • 将字符串列强制转换为数字类型

我只是展示了两个选项:

胁迫:

有一个Field.coerce()方法“强制”jOOQ Field对不同类型的引用,而不会对生成的SQL产生任何影响。 E.g:

dsl.select()
   .from(Table1)
   .leftOuterJoin(Table2)
   .on(Table1.city_id.eq(Table2.city_id.coerce(Table1.city_id)))
   .fetch();

Rawtype cast:

与胁迫一样,您可以使用rawtype强制转换以获得相同的效果(除非您使用的是convertersdata type bindings):

dsl.select()
   .from(Table1)
   .leftOuterJoin(Table2)
   .on(Table1.city_id.eq((Field) Table2.city_id))
   .fetch();

旁注:

当然,最好在两个表中使用相同的类型,并使用实际的外键约束来强制完整性。