Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否将nvarchar值转换为十进制或数字数据类型?_Sql_Sql Server - Fatal编程技术网

Sql 是否将nvarchar值转换为十进制或数字数据类型?

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

我的SQL表中有一个名为“Market value”的列,其中该列的值类似于“+0000000 34567.4563”(包括+符号在内的18个字符长度),数据类型为
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,它已经按照我的预期工作了。我希望一旦数据量增加,格式不会影响性能。再次感谢。。。。。