首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么强制转换截断文本而不是抛出错误?

为什么强制转换截断文本而不是抛出错误?
EN

Stack Overflow用户
提问于 2020-09-20 14:50:36
回答 1查看 425关注 0票数 4

将文本转换为比值更短的长度会导致文本被截断。

代码语言:javascript
复制
select
    cast('ROAD-1234' as varchar2(8)) as id
from
    dual

ID      
--------
ROAD-123     
     --^ Notice that the number 4 has been removed

我原以为CAST AS VARCHAR2会表现得与CAST AS NUMBER相似。

代码语言:javascript
复制
select
    cast(1234 as number(3)) as id
from
    dual

Error: ORA-01438: value larger than specified precision allowed for this column

为什么投射作为VARCHAR2以静默方式截断文本而不是抛出像CAST那样的错误呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-20 16:07:01

这是ANSI SQL标准的一部分,其他兼容ANSI SQL的RDBMS也是这样做的:

对于固定长度的字符串目标,如果源的长度等于目标的固定长度,则强制转换的结果是源字符串。如果源的长度小于目标的固定长度,则转换的结果是右侧填充的源字符串,但是需要多个空格才能使长度匹配。如果源的长度大于目标的固定长度,则强制转换的结果是尽可能多地包含源字符串的字符串--在这种情况下,如果截断的字符不是所有空格,DBMS将返回SQLSTATE警告01004“警告-字符串数据,右截断”。

不幸的是,数据库通常不能同时发出警告和返回结果,因此它们会悄悄地截断结果。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63980242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档