转换表达式
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
jOOQ 的源代码生成器尝试在您的特定于供应商的数据类型和匹配的 Java 类型之间找到最准确的类型映射。 例如,大多数 VARCHAR
、CHAR
、CLOB
类型将映射到 String。 大多数 BINARY
、BYTEA
、BLOB
类型将映射到 byte[]
。 NUMERIC
类型将默认映射到 java.math.BigDecimal
,但也可以是 java.math.BigInteger
、java.lang.Long
、java.lang.Integer
、java.lang.Short
、java.lang.Byte
、java.lang.Double
、java.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
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的意见!