[20161003]to_char与前导空格.txt

简介: [20161003]to_char与前导空格.txt --昨天做测试时遇到的问题: create table t1 tablespace sugar as select rownum id ,lpad('A',32,'A') name from dual con...

[20161003]to_char与前导空格.txt

--昨天做测试时遇到的问题:
create table t1 tablespace sugar as select rownum id ,lpad('A',32,'A') name from dual connect by level<=1e5;

--但是我写成如下:
create table t1 tablespace sugar as select rownum id ,to_char(rownum,'000000')||lpad('A',26,'A') name from dual connect by level<=1e5;

--我以为两者应该占用大小一样,但是发现不同。
SCOTT@book> @ &r/desc t1
           Name    Null?    Type
           ------- -------- --------------
    1      ID               NUMBER
    2      NAME             VARCHAR2(33)

--发现name类型是VARCHAR2(33),根本不是我期望的VARCHAR2(32).

SCOTT@book> column c120 format a120
SCOTT@book> select dump(name) c120 from t1 where rownum=1 ;
C120
------------------------------------------------------------------------------------------------------------------------
Typ=1 Len=33: 32,48,48,48,48,48,49,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65

--自己发现前面有一个空格。

在官方文档https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34570里面你能看到一段介绍

Number Format Elements

A number format model is composed of one or more number format elements. The tables that follow list the elements of a
number format model and provide some examples.

Negative return values automatically contain a leading negative sign and positive values automatically contain a leading
space unless the format model contains the MI, S, or PR format element.

--使用FM正常,什么意思呢?

SYS@book> SELECT TO_CHAR(12, 'FM0000') FROM DUAL;
TO_CH
-----
0012

SYS@book> SELECT length(TO_CHAR(12, 'FM0000')) FROM DUAL;
LENGTH(TO_CHAR(4,'FM0000'))
---------------------------
                         4

FM Yes
Returns a value with no leading or trailing blanks.
See Also: Additional discussion on this format model modifier in the Oracle Database SQL Reference.

--下次在测试中注意这个细节。

目录
相关文章
|
2天前
去掉字符串前后空格/去掉字符串中所有空格(包括中间连续空格)/去掉所有全角半角空格/去掉所有全角半角&nbsp;空格
去掉字符串前后空格/去掉字符串中所有空格(包括中间连续空格)/去掉所有全角半角空格/去掉所有全角半角&nbsp;空格
|
2天前
|
Java
Java正则表达式去掉非汉字字符
【5月更文挑战第11天】Java正则表达式去掉非汉字字符
16 3
|
8月前
|
C语言
向字符串添加空格
首先我们可以算出s数组的大小-len,也可以直接得到spaces的大小-即要添加的空格数,那么我们要创建的数组大小是len+spacesSize吗? 不是,应该是len+spacesSize+1,这里的加一是存放一个'\n' 这里呢 我们可以写一个for i循环,用来把s中的元素放到arr里面,然后在外面定义一个falg用来充当arr的下标,存进一个元素falg++,再定义一个j=0,当i == space[j]就存放空格,每存放一个空格++.
44 0
|
12月前
|
数据采集 移动开发
一日一技:在字符串中批量替换单个字符
一日一技:在字符串中批量替换单个字符
102 0
fmt.Printf() 如果 format 里结尾没有 \n,输出的字符串串结尾会带有一个 '%'
fmt.Printf() 如果 format 里结尾没有 \n,输出的字符串串结尾会带有一个 '%'
解决scanf无法完整获取带空格字符串问题
解决scanf无法完整获取带空格字符串问题
解决scanf无法完整获取带空格字符串问题
【输出亲朋字符串】char字符对应的ASCII码值
【输出亲朋字符串】char字符对应的ASCII码值
119 0
字符串加空格
给定一个字符串,在字符串的每个字符之间都加一个空格。 输出修改后的新字符串。
125 0
772. 只出现一次的字符 ---- 给你一个只包含小写字母的字符串。请你判断是否存在只在字符串中出现过一次的字符
给你一个只包含小写字母的字符串。 请你判断是否存在只在字符串中出现过一次的字符。 如果存在,则输出满足条件的字符中位置最靠前的那个。
233 0