SQL Server:应使用什么区域设置将数值格式化为 SQL Server 格式?

发布于 2024-08-26 10:11:56 字数 2318 浏览 4 评论 0原文

似乎 SQL Server 不接受使用以下格式的数字任何特定的语言环境。 它还不支持具有 0-9 以外数字的区域设置。

例如,如果当前区域设置是孟加拉语,则数字 123456789 将显示为 "১২৩৪৫৬৭৮৯"。这只是数字,不管数字分组是什么。

但是,对于Invariant区域设置中的数字也会出现同样的问题,该区域设置将数字格式设置为“123,456,789”,而 SQL Server 不会接受这种格式。

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

如果我在.NET(我不是)中,我可以仔细阅读标准数字格式字符串。 .NET 中可用的格式代码:

  • c(货币):$123.46
  • d(十进制):1234
  • e(指数):1.052033E+003
  • f(定点):1234.57
  • g(常规):123.456
  • n(数字):1,234.57
  • p (百分比):100.00 %
  • r(往返):123456789.12345678
  • x(十六进制):FF

仅 6 接受所有数字类型:

  • c(货币):$123.46
  • d(十进制):1234
  • e(指数):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(指数):1.052033E+003
  • f(定点):1234.57
  • g(一般): 123.456
  • n(数字):1,234.57
  • p(百分比):100.00 %
  • r(往返):123456789.12345678
  • x(十六进制): FF

其余两个中,固定取决于区域设置的数字,而不是所使用的数字,留下通用 g 格式

  • c(货币):$123.46
  • d(十进制):1234
  • e(指数):1.052033E+003
  • f(定点):1234.57
  • g(常规):123.456
  • < Strike>n(数字):1,234.57
  • p(百分比):100.00 %
  • r(往返):123456789.12345678
  • x(十六进制):FF< /strike>

我什至不能肯定地说 g 格式不会添加数字分组(例如 1,234)。

是否有一个区域设置可以按照 SQL Server 期望的方式格式化数字?有.NET格式的代码吗? java格式的代码?有Delphi格式的代码吗?有VB格式的代码吗? stdio 格式代码?

拉丁数字

It seems that SQL Server does not accept numbers formatted using any particular locale.
It also doesn't support locales that have digits other than 0-9.

For example, if the current locale is bengali, then the number 123456789 would come out as "১২৩৪৫৬৭৮৯". And that's just the digits, nevermind what the digit grouping would be.

But the same problem happens for numbers in the Invariant locale, which formats numbers as "123,456,789", which SQL Server won't accept.

Is there a culture that matches what SQL Server accepts for numeric values? Or will i have to create some custom "sql server" culture, generating rules for that culture myself from lower level formatting routines?

If i was in .NET (which i'm not), i could peruse the Standard Numeric Format strings. Of the format codes available in .NET:

  • c (Currency): $123.46
  • d (Decimal): 1234
  • e (Exponentional): 1.052033E+003
  • f (Fixed Point): 1234.57
  • g (General): 123.456
  • n (Number): 1,234.57
  • p (Percent): 100.00 %
  • r (Round Trip): 123456789.12345678
  • x (Hexadecimal): FF

Only 6 accept all numeric types:

  • c (Currency): $123.46
  • d (Decimal): 1234
  • e (Exponentional): 1.052033E+003
  • f (Fixed Point): 1234.57
  • g (General): 123.456
  • n (Number): 1,234.57
  • p (Percent): 100.00 %
  • r (Round Trip): 123456789.12345678
  • x (Hexadecimal): FF

And of those only 2 generate string representations, in the en-US locale anyway, that would be accepted by SQL Server:

  • c (Currency): $123.46
  • d (Decimal): 1234
  • e (Exponentional): 1.052033E+003
  • f (Fixed Point): 1234.57
  • g (General): 123.456
  • n (Number): 1,234.57
  • p (Percent): 100.00 %
  • r (Round Trip): 123456789.12345678
  • x (Hexadecimal): FF

Of the remaining two, fixed is dependant on the locale's digits, rather than the number being used, leaving General g format:

  • c (Currency): $123.46
  • d (Decimal): 1234
  • e (Exponentional): 1.052033E+003
  • f (Fixed Point): 1234.57
  • g (General): 123.456
  • n (Number): 1,234.57
  • p (Percent): 100.00 %
  • r (Round Trip): 123456789.12345678
  • x (Hexadecimal): FF

And i can't even say for certain that the g format won't add digit groupings (e.g. 1,234).

Is there a locale that formats numbers in the way SQL Server expects? Is there a .NET format code? A java format code? A Delphi format code? A VB format code? A stdio format code?

latin-numeral-digits

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半城柳色半声笛 2024-09-02 10:11:56

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

整数常量由一串数字表示,这些数字不是
用引号引起来并且不
包含小数点。整数
常量必须是整数;他们
不能包含小数。

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

浮点实数常数使用科学表示
符号。

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

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

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

The SQL Server specifications for constants are describing the acceptable formats in T-SQL expressions and batches:

integer constants are represented by a string of numbers that are not
enclosed in quotation marks and do not
contain decimal points. Integer
constants must be whole numbers; they
cannot contain decimals.

decimal constants are represented by a string of numbers that are not
enclosed in quotation marks and
contain a decimal point.

float and real constants are represented by using scientific
notation.

money constants are represented as string of numbers with an optional
decimal point and an optional currency
symbol as a prefix. Money constants are
not enclosed in quotation marks. SQL
Server does not enforce any kind of
grouping rules such as inserting a
comma (,) every three digits in
strings that represent money. Commas
are ignored anywhere in the specified
money literal.

To indicate whether a number is positive or negative, apply the + or - unary operators to a numeric constant. This creates a numeric expression that represents the signed numeric value. Numeric constants use positive when the + or - unary operators are not applied.

The good news is that client applications don't need to worry about these requirements. Client applications should pass numeric values as @parameters, not as T-SQL literal constants.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文