我正在使用以下內容在T-SQL中創建逗號格式的數字。如何擺脫小數點後的小數點以及數字。所以如果我在格式化後得到1,112.00,我怎麼才能得到1,112?在SQL Server 2008 R2中用逗號格式化數字,但沒有小數?
SELECT CONVERT(varchar, CAST(1112 AS money), 1)
我正在使用以下內容在T-SQL中創建逗號格式的數字。如何擺脫小數點後的小數點以及數字。所以如果我在格式化後得到1,112.00,我怎麼才能得到1,112?在SQL Server 2008 R2中用逗號格式化數字,但沒有小數?
SELECT CONVERT(varchar, CAST(1112 AS money), 1)
DECLARE @val varchar(50)
set @val = CONVERT(varchar(50), CAST(1112 AS money), 1)
SELECT left(@val, len(@val) - 3)
這也小數點後的作品以數字:
DECLARE @val varchar(50)
set @val = CONVERT(varchar(50), CAST(1112.56 AS money), 1)
SELECT left(@val, len(@val) - 3)
注意:作爲@Mahmoud賈邁勒指出,格式化往往更適合於從前到執行結束。
像這樣:
SELECT REPLACE(CONVERT(VARCHAR(20), CAST(1112 AS MONEY), 1), '.00', '');
這將始終正常工作。由於CONVERT(VARCHAR(20), CAST(1112 AS MONEY), 1)
將始終使用.00
返回一個數字。但是,如果在逗號後面有十進制數字,MitchWheat's answer會更好。
請注意,:你應該考慮在前端應用程序中做這個格式化的東西。 T-SQL與格式無關。
Mahmoud - 感謝您的幫助。如果我們有1112.34,那麼截斷.00將不起作用。我正在尋找一個通用的解決方案。 – Sunil
@Sunil - 是的,你是對的。這在1112.34的情況下將不起作用。但是,如果你在你的問題中提到的情況下,它總能正常工作。因爲'CONVERT(VARCHAR(20),CAST(1112 AS MONEY),1);'總是用'.00'返回一個數字不是嗎?任何方式@MitchWheat的答案比這更好,它適用於這種情況。 –
+1有關前端應用程序格式化的觀點。 –
經過一番研究,我發現了2個可能的答案,我的第一個問題。它們列在下面。
選項1:米奇小麥的答案是一個可能的答案。但是,當想要在SELECT中格式化列值時,我們必須使用Mitch的T-SQL代碼創建用戶定義的標量函數,並從SQL中調用此UDF。
-- =============================================
-- Description: Formats a number and truncates
-- the decimal part. You can pass
-- a number as a string or a numeric type.
-- =============================================
CREATE FUNCTION dbo.Utility_fn_FormatNumberAndTruncateDecimals
(
@unFormattedNumber VARCHAR(100)
)
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @val VARCHAR(100)
SET @val = convert(VARCHAR(50), cast(@unFormattedNumber AS MONEY), 1)
RETURN (SELECT left(@val, len(@val) - 3))
END
GO
--call this function using either of the SELECTS below
SELECT dbo.Utility_fn_FormatNumberAndTruncateDecimals('233444')
SELECT dbo.Utility_fn_FormatNumberAndTruncateDecimals(233444.345)
選項2:我們可以使用所謂的「PARSENAME」一個內置的系統功能,如下面T-SQL代碼,格式化和截斷小數。
SELECT PARSENAME(CONVERT(VARCHAR, CAST('2334442221.345222' AS MONEY), 1),2)
「但是,當一個人想要在SELECT中格式化列值時 - 」不正確。我這樣做是爲了讓意圖清楚。我可以輕鬆地將它內聯。 –
米奇 - 你說得對。不知何故,我忽略了這個事實。我可以剛剛使用你的邏輯內聯。欣賞你的答案。 – Sunil
我該如何標記2個答案?我添加了一個詳細的答案,加上米奇的帖子也是一個答案。 – Sunil
使用SQL Server 2012+您可以使用FORMAT()函數。你會使用'#,##'作爲你的第二個參數。 http://msdn.microsoft.com/en-us/library/hh213505.aspx – Volvox
可能重複[如何在T-SQL中用逗號格式化數字?](https://stackoverflow.com/questions/4377352/how-do-i-format -a-number-with-commas-in -t-sql) –