orcale lapd() length()函数计算长度的区别

dyflovexlp 2010-07-29 11:59:24
1。 select length('系统管理') from dual 长度为4没错

2。 select lpad('系统管理', length('系统管理')+4, '0') from dual 但是这个答案却是"系统管理",而不是"0000系统管理"

lapd函数把中文当作两个字符, 而length函数把中文当作一个字符





问题: select lpad(text, length(text)+4, '0') from tb_test

text字段有可能是中文,有可能是英文,也有可能是中英文夹杂,那么请问如何确保都能在左边加"0000"
...全文
327 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
minitoy 2010-07-29
  • 打赏
  • 举报
回复
SQL> select lpad('系统管理', lengthb('系统管理')+4, '0') from dual;

LPAD('系统管理',LENGTHB('系统
------------------------------
0000系统管理

SQL>
zjhiphop2006 2010-07-29
  • 打赏
  • 举报
回复
或者直接写成:select '0000'||length(text) from tb_test

如果想要动态添加text到指定的长度到total_len,可以写成:

select lpad(0,total_len-length(text),0)||length(text) from tb_test
duanzhi1984 2010-07-29
  • 打赏
  • 举报
回复
用TO_CHAR
华夏小卒 2010-07-29
  • 打赏
  • 举报
回复
--create table tt(id varchar(20));
--insert into tt select 'era' from dual;
--insert into tt select '咋发发发' from dual;

select '0000'||id from tt


0000era
0000咋发发发


你不就是想在前面加4个0吗,用不到那么多函数吧
心中的彩虹 2010-07-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 dyflovexlp 的回复:]
1。 select length('系统管理') from dual 长度为4没错

2。 select lpad('系统管理', length('系统管理')+4, '0') from dual 但是这个答案却是"系统管理",而不是"0000系统管理"

lapd函数把中文当作两个字符, 而length函数把中文当作一个字符





问题: select lpad(te……
[/Quote]


已用时间: 00: 00: 00.01
SQL> select concat('0000','系统管理'),'0000'||'系统管理' from dual;

CONCAT('0000 '0000'||'系
------------ ------------
0000系统管理 0000系统管理



minitoy 2010-07-29
  • 打赏
  • 举报
回复
The LENGTH functions return the length of char. LENGTH calculates length using characters as defined by the input character set. LENGTHB uses bytes instead of characters.

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧