![](/img/trans.png)
[英]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.