Use*_*973 4 oracle casting truncate varchar2 oracle18c
将文本转换为比值短的长度会导致文本被截断。
select
cast('ROAD-1234' as varchar2(8)) as id
from
dual
ID
--------
ROAD-123
--^ Notice that the number 4 has been removed
Run Code Online (Sandbox Code Playgroud)
我原以为这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
Run Code Online (Sandbox Code Playgroud)
为什么CAST AS VARCHAR2 会默默地截断文本而不是像 CAST AS NUMBER 那样抛出错误?
小智 5
这是 ANSI SQL 标准的一部分,其他符合 ANSI SQL 的 RDBMS 也这样做:
对于定长字符串目标,如果源的长度等于目标的定长,则CAST的结果就是源字符串。如果源的长度比目标的固定长度短,则 CAST 的结果是将源字符串填充在右侧,但需要许多空格才能使长度匹配。如果源的长度比目标的固定长度长,则 CAST 的结果是一个包含尽可能多的源字符串的字符串——在这种情况下,如果截断的字符不全是空格,您的DBMS 将返回 SQLSTATE 警告 01004“警告字符串数据,右截断”。
不幸的是,数据库通常无法同时发出警告和返回结果,因此它们会默默地截断结果
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |