oracle - 如何在sqlcl中获取字符串的长度
问题描述
我试图根据名称中字符串的长度显示前三行。但系统只读取字符串列的预定义长度而不是列中的字符串
SQL> select max(length(name)) from cus_detail;
MAX(LENGTH(NAME))
-----------------
10
SQL> select *
from (select id, name, length(name) as namelen, distance
from cus_detail
order by length(name) desc
)
where rownum<=3;
ID NAME NAMELEN DISTANCE
---------- ---------- ---------- ----------
1 paul 10 15
2 baul 10 15
3 mereum 10 20
解决方案
这就是CHAR
datatype 所做的 - 它用空格填充值直到整个列长度:
SQL> create table test (name char(10));
Table created.
SQL> insert into test (name) values ('London');
1 row created.
SQL> select max(length(name)) from test;
MAX(LENGTH(NAME))
-----------------
10
SQL>
仔细看看:
SQL> select '#' || name ||'#' name, dump(name) dmp from test;
NAME DMP
------------ --------------------------------------------------
#London # Typ=96 Len=10: 76,111,110,100,111,110,32,32,32,32
^^^^ L o n d o n ^^^^^^^^^^^
spaces spaces
所以,你可以trim
的价值:
SQL> select max(length(trim(name))) from test;
MAX(LENGTH(TRIM(NAME)))
-----------------------
6
SQL>
或者 - 甚至更好 - 将列的数据类型更改为varchar2
.
推荐阅读
- ios - SceneKit,动态加载和替换纹理的最有效方法是什么?UIImage,MTLTexture,MDLTexture,URL?
- reactjs - typescript 不会在 reac-router-dom 上呈现动态 url
- javascript - HTML、JS、video.js 中的视频自动播放
- ruby-on-rails - Rails Lockbox - Lockbox Gem - 未定义方法:解密
- jquery - jquery - 当为 animate() 传递多个元素时,自定义函数提前返回的承诺/延迟
- sql - 如果 SQL IN 运算符中的字符串为空,则选择所有数据
- ios - Swift 如何使用表格视图单元格中的按钮更新子视图的标签和图像视图
- r - How to count number of rows in data.table using same condition on multiple columns in R
- vue.js - 在 VUE CLI 中使用 this.router.push 和跟踪动画结束进行转换
- php - 如何从具有值的行中选择数据