簡體   English   中英

如何將 nvarchar 轉換為 SQL 服務器的 int 類型

[英]How to convert nvarchar into int type for SQL Server

我試圖計算 [Trans Det Amt ex Tax] 列的總數,如下所示:

SELECT 
    Loyalty_Type_Code, 
    COUNT([Loyalty_Number]), 
    FORMAT(SUM([Trans_Det_Amt_ex_Tax]), '##,###,###,##0')
FROM 
    CRM_POWERBI_RETAIL
WHERE 
    Trans_Hdr_Sale_Date BETWEEN '2019-01-01' AND '2019-10-31'
GROUP BY 
    Loyalty_Type_Code
UNION
SELECT 
    'TOTAL', 
    COUNT(*) AS CCC, 
    COUNT(*) AS BBB
FROM 
    CRM_POWERBI_RETAIL

我收到此錯誤:

消息 245,第 16 級,State 1,第 39 行
將 nvarchar 值 '67,527,726,031' 轉換為數據類型 int 時轉換失敗。

所以我嘗試使用以下方法將其轉換為 INT 類型:

SELECT 
    CONVERT(INT, Trans_Det_Amt_ex_Tax)
FROM 
    CRM_POWERBI_RETAIL

但結果還是說

將 nvarchar 值 '67,527,726,031' 轉換為數據類型 int 時轉換失敗

請讓我知道如何解決這個問題。

感謝您的所有回答。

不要將值轉換為字符串:

SELECT Loyalty_Type_Code , COUNT([Loyalty_Number]),  
       SUM([Trans_Det_Amt_ex_Tax]))
FROM CRM_POWERBI_RETAIL
WHERE Trans_Hdr_Sale_Date BETWEEN '2019-01-01' AND '2019-10-31'
GROUP BY Loyalty_Type_Code
UNION
SELECT 'TOTAL', COUNT(*) AS CCC, COUNT(*) AS BBB
FROM CRM_POWERBI_RETAIL;

UNION ALL中的所有類型都必須相同。 如果它看到一個字符串和一個 integer(如第三列),它將嘗試將字符串轉換為 integer。 逗號是不可能的。

或者,您可以將兩列都轉換為字符串。 更簡單的方法使用GROUPING SETS

SELECT COALESCE(Loyalty_Type_Code, 'Total'), 
       COUNT([Loyalty_Number]),  
       FORMAT(SUM([Trans_Det_Amt_ex_Tax]), '##,###,###,##0')
FROM CRM_POWERBI_RETAIL
WHERE Trans_Hdr_Sale_Date BETWEEN '2019-01-01' AND '2019-10-31'
GROUP BY GROUPING SETS ( Loyalty_Type_Code, () );

select CONVERT(bigint, Trans_Det_Amt_ex_Tax)

int不能容納那么大的數字

如果要將值轉換為字符串,請嘗試刪除逗號並使用足夠大的數據類型轉換來存儲該數據:

SELECT CAST(REPLACE('67,527,726,031',',','') AS BIGINT);

這將去除逗號並將數據存儲為BIGINT

我不是 100% 確定,但如果您要添加很多值,您可能需要將CAST SUM為更大的數據類型。

DB小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM