微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么CAST会截断文本?

如何解决为什么CAST会截断文本?

我注意到,将文本强制转换为短于该值的长度会导致文本被截断。

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类似。

select
    cast(1234 as number(3)) as id
from
    dual

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

为什么CAST AS VARCHAR2会无提示地截断文本,而不是像CAST NUMBER那样引发错误

解决方法

这是ANSI SQL标准的一部分,而其他符合ANSI SQL的RDBMS则执行相同的操作:

对于固定长度的字符串目标,如果源的长度等于目标的固定长度,则CAST的结果就是源字符串。如果源的长度短于目标的固定长度,则CAST的结果是在右侧填充源字符串,但是需要很多空格才能使长度匹配。如果源的长度大于目标的固定长度,则CAST的结果是一个字符串,其中包含尽可能多的源字符串–在这种情况下,如果截断的字符不是全部空格,则您的DBMS将返回SQLSTATE警告01004“警告字符串数据,右截断”。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。