我是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(),无效。
任何帮助表示赞赏。提前谢谢。
答案 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强制转换以获得相同的效果(除非您使用的是converters或data type bindings):
dsl.select()
.from(Table1)
.leftOuterJoin(Table2)
.on(Table1.city_id.eq((Field) Table2.city_id))
.fetch();
当然,最好在两个表中使用相同的类型,并使用实际的外键约束来强制完整性。