代码之家  ›  专栏  ›  技术社区  ›  Daniel

T-SQL:将“numeric”格式化为类似于c#样式{0:#.00###}的格式

  •  0
  • Daniel  · 技术社区  · 16 年前

    数据类型的格式类似于c {0:#.00####} 但是在T-SQL中呢?

    例如

    1. 14.456700应该产生14.4567。
    2. 15.00应该产生15.00。
    6 回复  |  直到 16 年前
        1
  •  0
  •   Tom H zenazn    16 年前

        2
  •  3
  •   HLGEM    16 年前

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

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

    设置值格式而不需要强制转换和子字符串

    使用函数Call 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上运行

    Documentation

        4
  •  0
  •   Russ Cam    16 年前

    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