sql - 标准 SQL 和 Teradata 强制转换语法之间的语义差异
问题描述
我试图了解以下两种语法之间的区别,它们在将字符串转换为整数时似乎在做同样的事情:
SELECT CAST('1' AS INTEGER), '1' (INTEGER)
导致:
|'1'|'1'|
|---|---|
|1 |1 |
但是他们在链接转换时不会做同样的事情:
SELECT CAST(CAST('1' AS INTEGER) AS VARCHAR(3)), ('1' (INTEGER)) (VARCHAR(3))
我现在得到:
|'1'|'1'|
|---|---|
|1 | |
第二列包含一个空字符串,而不是 null。两种语法之间是否存在语义差异,或者这只是一个错误?
我正在使用版本 16.20.05.01
解决方案
正如评论中提到的(没有人想回答?),在“CAST 与 Teradata 转换语法有何不同”部分中记录了行为差异
具体来说:
使用 Teradata 转换语法(即不使用 CAST)将数字转换为字符数据需要谨慎。
过程如下:
使用数值的默认值或指定的 FORMAT 将数值转换为字符串。前导和尾随填充字符不会被修剪。
如果需要,使用填充字符向右延伸,或根据需要从右侧截断,以符合目标长度规范。如果非填充字符被截断,则不报告字符串截断错误。
推荐阅读
- python - AttributeError:“QScatterSeries”对象没有属性“点”
- java - Swing:窗口最小化后图形消失
- android - 在使用 kotlin 的非活动类中使用 Toast.makeToast 时出错
- node.js - Docker + Node.JS + Socket.IO + Nginx (405 & 错误的握手方法)
- oracle11g - 从 oracle 11g 升级到 12c
- django - Django模型选择玩家玩
- laravel - Laravel Passport - 使用未经身份验证的 javascript 401 使用您自己的 api
- azure-devops - 使用 git flow 和 azure 管道设置拉取请求
- mysql - 查询不会在 WITH 子句上执行?
- python - 输入第三个字母后,如何解决额外输出行的问题?我不能在程序中使用 while 循环或范围