簡體   English   中英

jooq字符串到整數的轉換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM