Sql 是否将nvarchar值转换为十进制或数字数据类型?
我的SQL表中有一个名为“Market value”的列,其中该列的值类似于“+0000000 34567.4563”(包括+符号在内的18个字符长度),数据类型为Sql 是否将nvarchar值转换为十进制或数字数据类型?,sql,sql-server,Sql,Sql Server,我的SQL表中有一个名为“Market value”的列,其中该列的值类似于“+0000000 34567.4563”(包括+符号在内的18个字符长度),数据类型为NVARCHAR 我需要应用group by并获取“市场价值”之和,但group by不适用于NVARCHAR数据类型。因此,我使用CONVERT进行转换 SELECT CONVERT(Numeric(18,4), '+000000034567.4563') 但我得到的输出是“34567.4563”,但我的预期是“+0000000
NVARCHAR
我需要应用group by并获取“市场价值”之和,但group by不适用于NVARCHAR
数据类型。因此,我使用CONVERT
进行转换
SELECT CONVERT(Numeric(18,4), '+000000034567.4563')
但我得到的输出是“34567.4563”,但我的预期是“+0000000 34567.4563”
如何使用SQL实现这一点?您可以使用Format再次将其转换为所需的字符串表示形式 像这样
SELECT format(CONVERT(numeric(18,4), '+000000034567.4563'), '+000000000000.0000')
然后用它来计算,然后格式化
SELECT format(sum(CONVERT(numeric(18,4), yt.[Market Value])), '+000000000000.0000')
from yourtable yt
group by yt.whatever
检查此代码是否对您有任何帮助。它是用MySQL语言编写的
Select Concat(Left(Market_Value,1),
Repeat('0',(Length(Market_value)-Length(concat(left(Market_Value,1),
sum(substring(Market_value,2,Length(Market_Value))))))),
sum(substring(Market_value,2,Length(Market_Value)))) as Market_Value
from Test57 group by Market_value;
您期望
+0000000 34567.4563
的原因是什么?为什么首先要将数字存储为varchar?好吧,你不会在数字之前得到+
符号,因为它已经表示正数,但如果它是负数,你会在转换时得到它。谢谢Manfred,它已经按照我的预期工作了。我希望一旦数据量增加,格式不会影响性能。再次感谢。。。。。