停止concat删除前导0

时间:2011-10-20 08:52:44

标签: sql oracle

希望有人能提供帮助。

我正在尝试向我的查询添加||'m',但是当我添加concat时,它会删除前导零。

没有||'m',我得到了这个结果:

0.00

以concat为例,我得到了这个结果:

.0m

编辑: 这是查询:

round(MAX(city_longitude),1) - round(MIN(city_longitude),1)||'m'

干杯

1 个答案:

答案 0 :(得分:7)

尝试将整个ROUND语句包装在TO_CHAR中,为其指定格式掩码。

TO_CHAR(round(MAX(city_longitude),1) - round(MIN(city_longitude),1), '0.00')||'m'

这样,您可以有效地将字符串与字符串连接起来,而您当前正在使用字符串连接数字,从而强制进行隐式转换。

隐含的转换通常不受欢迎,因为它们可能会导致意外的结果。

Oracle说:

  

Oracle建议您指定显式转换,而不是   依赖于隐式或自动转换,原因如下:

     

•使用explicit时,SQL语句更容易理解   数据类型转换函数。

     

•隐式数据类型转换会对其产生负面影响   性能,特别是在转换列值的数据类型时   对于常数而不是相反的方式。

     

•隐式转换取决于它发生的上下文和   在每种情况下可能不会以相同的方式工作。例如,隐含的   从datetime值到VARCHAR2值的转换可能会返回   意外的年份取决于NLS_DATE_FORMAT的值   参数。

     

•隐式转换的算法可能会发生变化   软件版本和Oracle产品之间。显性行为   转换更容易预测。

数字格式在这里: http://www.oradev.com/oracle_number_format.jsp

希望它有所帮助...