T-SQL:格式化“数字”以格式化为类似于c#style {0:#。00 ####}

时间:2009-03-31 18:05:52

标签: sql sql-server

是否有一种简单的方法可以将SQL Server 数字(18,6)数据类型格式化为类似于c#的 {0:#。00 ####} 但是在T-SQL中?

E.g。

  1. 12.550000应该产生12.55。
  2. 14.456700应该产生14.4567。
  3. 15.00应该产生15.00。

5 个答案:

答案 0 :(得分:3)

坦率地说,这种格式化最好由不在SQL中的应用程序完成。 SQl用于数据访问和影响数据内容,它在任何格式化方面都不是很好。

答案 1 :(得分:1)

有点不同的情况,没有尾随'.00':

CAST(CAST(@val AS REAL) AS VARCHAR)
  1. 12.550000将产生12.55。
  2. 14.456700将产生14.4567。
  3. 15.00将产生15。

答案 2 :(得分:0)

CONVERT()CAST()函数

SELECT CAST(@val AS numeric(18,6))

SELECT CAST(@val AS decimal(18,6))

我没有遇到本机T-SQL格式字符串,但是从2005年开始,我确信你可以用你选择的.NET语言编写的CLR UDF实现一些东西。

答案 3 :(得分:0)

正如HLGEM所说,最好在前端做这种事情,但是对于踢,以下代码似乎有效。尽管如此,可能还有更好的方法。

REPLACE(
     RTRIM(
          REPLACE(
               CAST(@test AS VARCHAR), '0', ' '
          )
     ), ' ', '0'
) +
CASE
     WHEN @test = FLOOR(@test) THEN '00'
     WHEN FLOOR(@test*10) = @test * 10 THEN '0'
     ELSE ''
END

答案 4 :(得分:0)

无需使用Cast和Substring即可格式化值

使用功能调用Format

示例:

SELECT FORMAT(123456789, '##-##-#####');
DECLARE @d DATETIME = '10/01/2011';  
SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result'  
,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result'  
      ,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result'  
      ,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result';
SELECT FORMAT(@d, 'dd/MM/yyyy') AS FechaInicial 
SELECT FORMAT(@d, 'dd/MM/yyyy HH:mm:ss') AS FechaInicial 
declare @EndOfDayRate as decimal(18,4)='1.0002' 
SELECT  @EndOfDayRate   as EndOfDayRate
            ,FORMAT(@EndOfDayRate, 'N', 'en-us') AS 'Number Format'  
            ,FORMAT(@EndOfDayRate, 'G', 'en-us') AS 'General Format'  
            ,FORMAT(@EndOfDayRate, 'C', 'en-us') AS 'Currency Format'*  

复制并粘贴代码,然后在SQL Server上运行

有关SQL Server官方文档中的更多信息:Documentation