调用此代码时
DSLContext dslContext = DSL.using(SQLDialect.SQLSERVER);
dslContext.select(DSL.cast(field, SQLDataType.VARCHAR.length(255)));
select语句删除varchar长度的信息。
DSL.cast()方法返回cast("fieldName" as varchar(255))
,select返回select cast("fieldName" as varchar)
。
问题在于,在SQLServer中,没有长度信息的强制转换会在30个字符之后剪切结果here。这非常令人讨厌,因为我的值超过30个字符。所以有人想知道如何获得一个看起来像select cast("fieldName" as varchar(255))
的选择语句吗?
答案 0 :(得分:0)
仅在jOOQ 3.0中引入了DataType
上的长度,精度和比例信息,尽管在{0}}(issue #2708)之前CAST()
表达式中未使用该信息:
最新版本的jOOQ正确呈现
cast([fieldName] as varchar(255))
所以,我建议升级到最新版本。
此外,如果您的版本/用量生成cast("fieldName" as varchar)
,我怀疑您可能也传递了错误的SQLDialect
(而不是SQLSERVER
)。使用SQLSERVER
方言,标识符使用[brackets]
生成,与使用"double quotes"
标识符的其他方言不同...