[英]jooq String to Integer conversion
我是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();
由於city1_id在表1和表2中的格式不同。 所以它需要將table2的city_id從String轉換為Integer,反之亦然,我嘗試使用Integer.valueOf(),Integer.parseInt()不能正常工作。
任何幫助表示贊賞。 提前致謝。
jOOQ文檔( https://www.jooq.org/doc/latest/manual/sql-building/column-expressions/cast-expressions/ )描述了cast()
的用法,可在語句中使用它來進行強制轉換另一個類型的字段。
使用您的示例:
定義於表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();
使用強制轉換將Integer轉換為String的語句:
dsl.select()
.from(Table1)
.leftOuterJoin(Table2)
.on(Table1.city_id.cast(String.class).eq(Table2.city_id))
.fetch();
CAST()
Koshux提供了一個很好的答案,您可能應該將其用作顯式強制轉換類型,這樣不會使轉換成偶然。 您可以選擇是否:
我只顯示兩個選項:
有一個Field.coerce()
方法可將jOOQ Field
引用“強制”為其他類型,而這不會對生成的SQL產生任何影響。 例如:
dsl.select()
.from(Table1)
.leftOuterJoin(Table2)
.on(Table1.city_id.eq(Table2.city_id.coerce(Table1.city_id)))
.fetch();
與強制一樣,您也可以使用原始類型轉換來達到相同的效果(除非您使用轉換器或數據類型綁定 ):
dsl.select()
.from(Table1)
.leftOuterJoin(Table2)
.on(Table1.city_id.eq((Field) Table2.city_id))
.fetch();
當然,最好在兩個表中使用相同的類型,並使用實際的外鍵約束來強制執行完整性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.