可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

转换表达式

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

jOOQ 的源代码生成器尝试在您的特定于供应商的数据类型和匹配的 Java 类型之间找到最准确的类型映射。 例如,大多数 VARCHARCHARCLOB 类型将映射到 String。 大多数 BINARYBYTEABLOB 类型将映射到 byte[]NUMERIC 类型将默认映射到 java.math.BigDecimal,但也可以是 java.math.BigIntegerjava.lang.Longjava.lang.Integerjava.lang.Shortjava.lang.Bytejava.lang.Doublejava.lang.Float 中的任何一个。

有时,这种自动映射可能不是您需要的,或者 jOOQ 无法知道字段的类型。 在这些情况下,您可以像这样编写 SQL 类型 CAST

-- Let's say, your Postgres column LAST_NAME was VARCHAR(30)
-- Then you could do this:
SELECT CAST(AUTHOR.LAST_NAME AS TEXT) FROM DUAL

在 jOOQ 中,您可以编写类似的内容

create.select(AUTHOR.LAST_NAME.cast(VARCHAR(100))).fetch();

完整的 CAST API 在 org.jooq.Field 中包含以下三个方法

public interface Field<T> {

    // Cast this field to the type of another field
    <Z> Field<Z> cast(Field<Z> field);

    // Cast this field to a given DataType
    <Z> Field<Z> cast(DataType<Z> type);

    // Cast this field to the default DataType for a given Class
    <Z> Field<Z> cast(Class<? extends Z> type);
}

// And additional convenience methods in the DSL:
public class DSL {
    <T> Field<T> cast(Object object, Field<T> field);
    <T> Field<T> cast(Object object, DataType<T> type);
    <T> Field<T> cast(Object object, Class<? extends T> type);
    <T> Field<T> castNull(Field<T> field);
    <T> Field<T> castNull(DataType<T> type);
    <T> Field<T> castNull(Class<? extends T> type);
}
CAST 表达式直接在 SQL 中转换数据类型。 如果您希望更改数据类型而不影响呈现的 SQL,您可能更喜欢 强制转换 您的表达式。

方言支持

此示例使用 jOOQ

cast("1", VARCHAR(10))

翻译成以下特定方言的表达式

访问

cstr('1')

ASE, Aurora Postgres, DB2, Databricks, Derby, DuckDB, Exasol, Firebird, H2, HSQLDB, Hana, Postgres, Redshift, SQLDataWarehouse, SQLServer, SQLite, Snowflake, Sybase, Teradata, Trino, Vertica, YugabyteDB

CAST('1' AS varchar(10))

Aurora MySQL, MariaDB, MemSQL, MySQL

CAST('1' AS char(10))

BigQuery

CAST('1' AS string)

ClickHouse

CAST('1' AS String(10))

CockroachDB

CAST('1' AS string(10))

Informix

CAST('1' AS lvarchar(10))

Oracle

CAST('1' AS varchar2(10))
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

您对此页面有任何反馈吗? 我们很乐意听到您的意见!

The jOOQ Logo