是否有一种简单的方法可以将SQL Server 数字(18,6)数据类型格式化为类似于c#的 {0:#。00 ####} 但是在T-SQL中?
E.g。
答案 0 :(得分:3)
坦率地说,这种格式化最好由不在SQL中的应用程序完成。 SQl用于数据访问和影响数据内容,它在任何格式化方面都不是很好。
答案 1 :(得分:1)
有点不同的情况,没有尾随'.00':
CAST(CAST(@val AS REAL) AS VARCHAR)
答案 2 :(得分:0)
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