oracle TO_CHAR 长度 为啥select length(to_char('120','999')) from dual 的长度是4呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle TO_CHAR 长度 为啥select length(to_char('120','999')) from dual 的长度是4呢?相关的知识,希望对你有一定的参考价值。

to_char('120','999')
这里的'999'是指的数字格式,可不是要to_char的具体的数字。
'999'格式的结果就是在'120'的前面加一个空格,即:' 120'
所以 length(to_char('120','999')) =4追问

这是默认加的空格吗?可不可以指定长度,比如我想指定5位,该怎么做? 谢谢!

追答

length(to_char(120,'9999'))
具体的可以看看下面百度百科里的介绍
http://baike.baidu.com/view/6011617.htm

但是非常不明白你这么做的目的是什么?

追问

谢谢啊 ,我就是试验一下,像sqlserver 那样输出个定长的字符串来啊 例如 convert(varchar(20),getdate())

追答

记得采纳。

追问

convert(varchar(20),getdate()) 怎么改?

追答

conver(varchar(20),getdate(),120) 结果是'2013-03-27‘这样的。这是SQL SERVER的用法。

追问

我知道这是SQL SERVER的用法啊,我想转成oracle,长度20,怎么弄?

追答

to_char(sysdate,' yyyy-mm-dd hh:mi:ss'),长度可以自己在'yyyy-mm-dd hh:mi:ss'这里添加空格来实现。不过实在是没什么意义。

参考技术A 我不明白你这个操作是什么意思。

to_char('120','999')

首先, to_char 是把其他类型的 数据, 转换为字符串。
而 你这个 '120' 已经是 字符串了。
不知道为什么要再转换一次。

至于那个 LENGTH 为什么是4。
看看下面的执行结果, 请注意 TO_CHAR(120,'999'), 前面有一个空格。

SQL> SELECT TO_CHAR(120) A, LENGTH(TO_CHAR(120)) B FROM dual;
A B
------ ----------
120 3
SQL> SELECT TO_CHAR(120,'999') A, LENGTH(TO_CHAR(120,'999')) B FROM dual;
A B
-------- ----------
120 4追问

我就像sqlserver 那样输出个定长的字符串来啊 例如 convert(varchar(20),getdate())

追答

Oracle 格式化日期, 比 SQL Server 省事多了去了。

SQL> SELECT
2 TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') a
3 FROM
4 dual;
A
--------------------------------------
2013-03-26 13:36:33

如果要凑够长度为20,你想在什么位置加空格, 就在什么位置上面加空格啊。

参考技术B 你可以先to_char('120','999'),看是什么结果。前面就是多了一个空格,你可以ltrim一下。追问

 

 

 

是120,但是长度还是4???

追答

120前面有个空格的

oracle中char的效率为啥比varchar的高一些了

char是固定长度的 而varchar是实际长度,处理复杂一些 参考技术A char是固定长度的 而varchar是实际长度,处理复杂一些 ,cZQnse

以上是关于oracle TO_CHAR 长度 为啥select length(to_char('120','999')) from dual 的长度是4呢?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle - 为啥将数字转换为 TO_CHAR 时数字的前导零会消失

Oracle SQL TO_CHAR 可变长度

oracle to_char 语法

Oracle之to_char

oracle 时间函数

oracle中如何将long型的数据转换为char型