Oracle函数Substrb和Convert函数问题 100

PC机编码:SJIS,数据库编码:UTF-8CREATEORREPLACEFUNCTIONSUBSTRB2(strinchar,start_positioninnumbe... PC机编码:SJIS,数据库编码:UTF-8

CREATE OR REPLACE FUNCTION SUBSTRB2(str in char, start_position in number, length_ in number)
RETURN char
IS
BEGIN
return convert(substrb(convert(str, 'JA16SJIS', 'AL32UTF8'), start_position, length_), 'AL32UTF8', 'JA16SJIS');
END SUBSTRB2;
/

现在测试的时候输入的全角字符串截取完的字符串中有乱码。请问这个哪块出问题了?
展开
 我来答
晓枝柔
2016-09-21 · TA获得超过142个赞
知道小有建树答主
回答量:313
采纳率:0%
帮助的人:170万
展开全部
substr是按字符来计算,一个字母或汉字都按一个字符计算如:
substr('智能ABC',2,2)='能A'
如果想要按字节来计算则可以采用substrb函数,用法一样
substrb('智能ABC',3,4)='能AB'

当然还有另外几个按不同编码计算的函数
substrc:按Unicode编码,
substr2:按UCS2编码,
substr4:按UCS4编码。
追问
非常感谢你的回答。让我看到了希望。

SJIS编码中,一个全角字符占2字节。UTF8中,一个全角字符占3字节。
现在传入的是UTF8的字符串,想把它先转成SJIS字符串,然后再用substrb按照sjis传入的截取参数进行截取。但是按照我发的代码的写法,截取的会出现部分乱码。我想知道这是什么原因,并且怎么解决。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式