jooq 字符串到整数的转换
jooq String to Integer conversion
我是 Jooq 的新手。我想将字符串转换为整数。
定义见表1:-
TableField<?, Integer> city_id;
定义见表2:-
TableField<?, String> city_id;
在select查询中。
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(),不工作。
感谢任何帮助。提前致谢。
jOOQ 文档 (https://www.jooq.org/doc/latest/manual/sql-building/column-expressions/cast-expressions/) 描述了 cast()
的用法,它可以在语句中用于将字段转换为另一种类型。
使用你的例子:
Defined in Table1:-
TableField<?, Integer> city_id;
Defined in Table2:-
TableField<?, String> city_id;
In select query.
dsl.select()
.from(Table1)
.leftOuterJoin(Table2)
.on(Table1.city_id.eq(Table2.city_id))
.fetch();
Integer转String的语句:
dsl.select()
.from(Table1)
.leftOuterJoin(Table2)
.on(Table1.city_id.cast(String.class).eq(Table2.city_id))
.fetch();
理想解:CAST()
提供了一个很好的答案,您应该使用它,因为显式转换类型不会让转换成为偶然。您可以自己选择:
- 数字列转换为字符串类型
- 字符串列被转换为数字类型
我只是展示了另外两个选项:
强制:
有一个 Field.coerce()
方法 "coerces" jOOQ Field
对不同类型的引用而不会对生成的 SQL 产生任何影响。例如:
dsl.select()
.from(Table1)
.leftOuterJoin(Table2)
.on(Table1.city_id.eq(Table2.city_id.coerce(Table1.city_id)))
.fetch();
原始类型转换:
就像强制转换一样,您可以使用原始类型转换来获得相同的效果(除非您使用的是 converters or data type bindings):
dsl.select()
.from(Table1)
.leftOuterJoin(Table2)
.on(Table1.city_id.eq((Field) Table2.city_id))
.fetch();
旁注:
当然,最好在两个表中使用相同的类型,并使用实际的外键约束来强制完整性。
我是 Jooq 的新手。我想将字符串转换为整数。
定义见表1:-
TableField<?, Integer> city_id;
定义见表2:-
TableField<?, String> city_id;
在select查询中。
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(),不工作。
感谢任何帮助。提前致谢。
jOOQ 文档 (https://www.jooq.org/doc/latest/manual/sql-building/column-expressions/cast-expressions/) 描述了 cast()
的用法,它可以在语句中用于将字段转换为另一种类型。
使用你的例子:
Defined in Table1:-
TableField<?, Integer> city_id;
Defined in Table2:-
TableField<?, String> city_id;
In select query.
dsl.select()
.from(Table1)
.leftOuterJoin(Table2)
.on(Table1.city_id.eq(Table2.city_id))
.fetch();
Integer转String的语句:
dsl.select()
.from(Table1)
.leftOuterJoin(Table2)
.on(Table1.city_id.cast(String.class).eq(Table2.city_id))
.fetch();
理想解:CAST()
- 数字列转换为字符串类型
- 字符串列被转换为数字类型
我只是展示了另外两个选项:
强制:
有一个 Field.coerce()
方法 "coerces" jOOQ Field
对不同类型的引用而不会对生成的 SQL 产生任何影响。例如:
dsl.select()
.from(Table1)
.leftOuterJoin(Table2)
.on(Table1.city_id.eq(Table2.city_id.coerce(Table1.city_id)))
.fetch();
原始类型转换:
就像强制转换一样,您可以使用原始类型转换来获得相同的效果(除非您使用的是 converters or data type bindings):
dsl.select()
.from(Table1)
.leftOuterJoin(Table2)
.on(Table1.city_id.eq((Field) Table2.city_id))
.fetch();
旁注:
当然,最好在两个表中使用相同的类型,并使用实际的外键约束来强制完整性。