Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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的最佳方法是什么_Sql_Sql Server - Fatal编程技术网

为避免数千分隔符,重新格式化这段SQL的最佳方法是什么

为避免数千分隔符,重新格式化这段SQL的最佳方法是什么,sql,sql-server,Sql,Sql Server,作为SQL存储过程(生成XML输出)的一部分,我有以下行: FORMAT(Quantity * ld.UnitPrice, 'N2') AS '@value' 这几个月来产生了完全可以接受的结果。然而,上周该过程生成的XML所提供的服务失败了,因为该值超过了1000英镑(英镑),产生了以下输出1049.60 如果服务文档提到它不喜欢在作为属性传递给它的值中使用逗号这一事实,那就太好了,但这个参数是另一天的 我想知道如何最好地重新格式化这一行,这样它就不会产生任何分隔数千行的内容,换句话说,我需

作为SQL存储过程(生成XML输出)的一部分,我有以下行:

FORMAT(Quantity * ld.UnitPrice, 'N2') AS '@value'
这几个月来产生了完全可以接受的结果。然而,上周该过程生成的XML所提供的服务失败了,因为该值超过了1000英镑(英镑),产生了以下输出
1049.60

如果服务文档提到它不喜欢在作为属性传递给它的值中使用逗号这一事实,那就太好了,但这个参数是另一天的

我想知道如何最好地重新格式化这一行,这样它就不会产生任何分隔数千行的内容,换句话说,我需要它生成以下
1049.60
或类似的内容,只要值超过1000磅。它仍然需要保留小数点后两位


虽然我已经特别提到英镑,但事实上,这种格式需要与文化无关,以便所有超过1000英镑的数字都没有分隔符。

您可能可以删除格式函数。然后,如果需要,添加
convert(十进制(9,2),您的列)

您可能会删除format函数。然后,如果需要,添加
转换(十进制(9,2),您的列)

如果您决定坚持使用
格式
功能,只需共享一个选项,它还支持其他格式:

FORMAT(Quantity * ld.UnitPrice, '0.00') AS '@value'

如果您决定坚持使用
格式
功能,只想共享一个选项,它还支持其他格式:

FORMAT(Quantity * ld.UnitPrice, '0.00') AS '@value'

您可以使用格式为“F2”的FORMAT函数F'是定点格式说明符。所有数字类型都支持这一点

DECLARE @quantity int = 65;
DECLARE @unitPrice money = 150.33;

SELECT FORMAT(@quantity * @unitPrice, 'F2') AS 'Amount';

请参阅联机丛书>格式(Transact-SQL):

MSDN>标准数字格式字符串:

但是,如果将数字格式化为字符串,然后将其传递,则需要注意语言和区域性设置。小数点分隔符可能会变为逗号

您可以通过将区域性指定为FORMAT函数的“en-US”来确保这始终是一个句号,FORMAT函数接受可选的第三个参数

SET LANGUAGE 'Portuguese';
SELECT FORMAT(@quantity * @unitPrice, 'F2', 'en-US') AS 'Amount';

请参阅Alex Kuznetsov编写的SQL Server防御性数据库编程,由Redgate出版>第1章:基本防御性数据库编程技术>集合语言如何中断查询

许多开发人员仅在其服务器的默认语言设置下测试其代码,而不测试如果在具有不同语言设置的服务器上执行,或者如果会话级别的设置发生更改,其代码将如何响应


联机丛书>SQL Server中的本地语言版本:

您可以使用格式为“F2”的FORMAT函数F'是定点格式说明符。所有数字类型都支持这一点

DECLARE @quantity int = 65;
DECLARE @unitPrice money = 150.33;

SELECT FORMAT(@quantity * @unitPrice, 'F2') AS 'Amount';

请参阅联机丛书>格式(Transact-SQL):

MSDN>标准数字格式字符串:

但是,如果将数字格式化为字符串,然后将其传递,则需要注意语言和区域性设置。小数点分隔符可能会变为逗号

您可以通过将区域性指定为FORMAT函数的“en-US”来确保这始终是一个句号,FORMAT函数接受可选的第三个参数

SET LANGUAGE 'Portuguese';
SELECT FORMAT(@quantity * @unitPrice, 'F2', 'en-US') AS 'Amount';

请参阅Alex Kuznetsov编写的SQL Server防御性数据库编程,由Redgate出版>第1章:基本防御性数据库编程技术>集合语言如何中断查询

许多开发人员仅在其服务器的默认语言设置下测试其代码,而不测试如果在具有不同语言设置的服务器上执行,或者如果会话级别的设置发生更改,其代码将如何响应


联机丛书>SQL Server中的本地语言版本:

是否删除格式功能?然后,如果需要转换(十进制(9,2),您的列)谢谢,效果很好。完美的解决方案。@SeanLange。请将您的评论添加为答案,以便Dom可以接受吗?@GordonLinoff doneRemove format函数?然后,如果需要转换(十进制(9,2),您的列)谢谢,效果很好。完美的解决方案。@SeanLange。请您添加您的评论作为答案,以便Dom能够接受吗?@GordonLinoff donePlus one rep,只为提及亚历克斯·库兹涅佐夫(Alex Kuznetsov)的优秀著作。黄金!再加上一个代表就提到亚历克斯·库兹涅佐夫的优秀著作。黄金!