oracle sql length函数,sql – LENGTH命令的奇怪行为 – ORACLE

我在这里遇到一个我不明白的一个令人不快的情况.我将要写的功能的文档也没有什么可以照亮这个东西.

我有一个表字段titulo varchar2(55).我在巴西,这个领域的一些角色有口音,我的目标是创建一个没有口音的类似字段(由原来的字符代替,因为这是一个等等).

我可以使用一些功能来替代,翻译和其他功能,但是我通过互联网找到接缝更优雅,然后我使用它.那就是问题所在.

我的更新代码如下:

update myTable

set TITULO_URL = replace(

utl_raw.cast_to_varchar2(

nlssort(titulo,'nls_sort=binary_ai')

),' ','_');

正如我所说,目标是转换其等效的每个重音字符,没有口音加空格字符为_

然后我得到这个错误:

ORA-12899: value too large for column

"mySchem"."myTable"."TITULO_URL" (actual: 56,maximum: 55)

起初我虽然也许这些功能增添了一些角色,让我检查一下.我做了一个select命令,让我一行,其中titulo有55个字符.

select titulo from myTable where length(titulo) = 55

然后我选择一行做一些测试,我选择的行有这个值:’FGHJTÓRYODE YHJKS DADGHQÇAAASGA XCVBGLEASDEÔNASD'(我确实改变了一点保存数据,但结果是一样的)

当我做以下选择语句时,事情变得怪异:

select a,length(a),b,length(b)

from ( select 'FGHJTÓRYO DE YHJKS DA DGHQÇÃA DE ASGA XCVBGL EASDEÔNASD' a,replace(

utl_raw.cast_to_varchar2(

nlssort('FGHJTÓRYO DE YHJKS DA DGHQÇÃA DE ASGA XCVBGL EASDEÔNASD','nls_sort=binary_ai')

),'_') b

from dual

)

这个sql的结果是(我将把值放在另一个以便更好的可视化):

a LENGTH(a)

FGHJTÓRYO DE YHJKS DA DGHQÇÃA DE ASGA XCVBGL EASDEÔNASD 55

b LENGTH(b)

fghjtoryo_de_yhjks_da_dghqcaa_de_asga_xcvbgl_easdeonasd 56

比较两个字符串之间的一个大小没有差别:

FGHJTÓRYO DE YHJKS DA DGHQÇÃA DE ASGA XCVBGL EASDEÔNASD

fghjtoryo_de_yhjks_da_dghqcaa_de_asga_xcvbgl_easdeonasd

我已经在Toad,PLsql Developer和sqlPLUSW上测试了这个查询,结果相同.所以我的问题是这个LENGTH(b)= 56来自哪里?我知道它可以是字符集的东西,但我不知道为什么.我甚至用trim命令测试,结果是一样的.

另一个测试,我做了

> substr(b,1,55)结果与上述相同

> lenght(trim(b)),结果是56

> substr(b,56)结果是空的(没有null,没有空格,只是空)

建议@Sebas:

> LENGTHB(b)结果是56

> ASCII(substr(b,56))

那么,再来一次:这个长度(b)= 56来自哪里?

对不起,长期的帖子,谢谢你们谁在这里(阅读所有).

感谢那些还没读的人:)

最好的祝福

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值