[英]How to convert nvarchar type to only time type format in sql server
[英]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
為更大的數據類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.