SQL Server:应使用什么语言环境将数值格式化为SQL Server格式?

时间:2010-03-23 18:15:58

标签: sql-server sql-server-2000 globalization

似乎SQL Server does not accept numbers formatted使用任何特定的语言环境。 它也不支持具有 0-9 以外的数字的区域设置。

例如,如果当前区域设置为bengali,则数字 123456789 将显示为“1২3456789”。这只是数字,不管数字分组是什么。

不变区域设置中的数字也会出现同样的问题,它将数字格式设置为“123,456,789”,SQL Server将不接受这些数字。

是否存在与SQL Server接受的数值相匹配的文化?或者我是否必须创建一些自定义的“sql server”文化,自己从较低级别的格式化程序生成该文化的规则?

如果我在 .NET (我不是),我可以仔细阅读Standard Numeric Format strings。 .NET中可用的格式代码:

  • c(货币):$ 123.46
  • d(十进制):1234
  • e(Exponentional):1.052033E + 003
  • f(固定点):1234.57
  • g(一般):123.456
  • n(编号):1,234.57
  • p(百分比):100.00%
  • r(往返):123456789.12345678
  • x(十六进制):FF

只接受所有数字类型:

  • c(货币):$ 123.46
  • d(十进制):1234
  • e(Exponentional):1.052033E + 003
  • f(固定点):1234.57
  • g(一般):123.456
  • n(编号):1,234.57
  • p(百分比):100.00%
  • r(往返):123456789.12345678
  • x(十六进制):FF

在那些只有2个生成字符串表示的情况下,无论如何, en-US 语言环境都会被SQL Server接受:

  • c(货币):$ 123.46
  • d(十进制):1234
  • e(Exponentional):1.052033E + 003
  • f(固定点):1234.57
  • g(一般):123.456
  • n(编号):1,234.57
  • p(百分比):100.00%
  • r(往返):123456789.12345678
  • x(十六进制):FF

在其余两个中,fixed取决于区域设置的数字,而不是正在使用的数字,只留下一般g格式

  • c(货币):$ 123.46
  • d(十进制):1234
  • e(Exponentional):1.052033E + 003
  • f(固定点):1234.57
  • g(一般):123.456
  • n(编号):1,234.57
  • p(百分比):100.00%
  • r(往返):123456789.12345678
  • x(十六进制):FF

我甚至无法确定 g 格式不会添加数字分组(例如1,234)。

是否存在以SQL Server期望的方式格式化数字的语言环境?是否有.NET格式代码?一个java格式的代码?一个Delphi格式的代码? VB格式代码?一个stdio格式代码?

拉​​丁数字位数

1 个答案:

答案 0 :(得分:3)

constants的SQL Server规范描述了T-SQL表达式和批处理中可接受的格式:

  

整数常数由一串不是的数字表示   用引号括起来,不要   包含小数点。整数   常数必须是整数;他们   不能包含小数。

     

十进制常量由一串不是的数字表示   用引号括起来   包含小数点。

     

float 真实常量使用scientific表示   符号

     

money 常量表示为带有可选项的数字字符串   小数点和可选货币   符号作为前缀。货币常数是   没有用引号括起来。 SQL   服务器不强制执行任何类型的操作   分组规则,例如插入   逗号(,)每三位数字   代表金钱的字符串。逗号   被忽略在指定的任何地方   钱文字。

     

要指示数字是还是否定,请将+或 - 一元运算符应用于数字常量。这将创建一个表示有符号数值的数字表达式。当未应用+或 - 一元运算符时,数字常量使用正数。

好消息是客户端应用程序不需要担心这些要求。客户端应用程序应将数值作为 @parameters 传递,而不是作为T-SQL文字常量传递。