当值与字符串相互转换时,SQL Server 是否考虑文化/区域设置?
我正在尝试更新大型代码库,以便在格式化/解析值时正确指定 CultureInfo
和/或 IFormatProvider
。 例如,在解析从用户处获得的值时,我在调用 TryParse
时传递 CultureInfo.CurrentCulture
,并且在将浮点数转换为字符串以进行持久化时,我传递 <调用 ToString
时的 code>CultureInfo.InvariantCulture。
我的问题是:生成 SQL 查询时,我应该使用不变区域性、SQL 服务器区域性还是什么来格式化数字等? 也就是说,如果我的计算机设置为德语(德国),那么以下哪个查询是正确的?
select foo from bar where baz = 123.45
或者
select foo from bar where baz = 123,45
同样,如果我使用 SQL 的 CAST 将浮点值转换为字符串,SQL 将使用什么区域设置进行转换?
我确实搜索了 SQL 文档,但到目前为止我找不到任何好的答案。 我确实找到了一些有关日期格式的信息(SET DATEFORMAT 等),但仅此而已。
注意:我意识到将输入传递给 SQL 查询的首选方法是通过参数,因此为了论证,我们假设我有充分的理由将它们格式化为查询字符串。 此外,处理查询输入只是更广泛问题的一部分。
I'm attempting to update a large codebase to properly specify the CultureInfo
and/or IFormatProvider
when formatting/parsing values. For instance, when parsing a value I get from the user, I pass CultureInfo.CurrentCulture
when calling TryParse
, and when converting a float to a string for persistence, I pass CultureInfo.InvariantCulture
when calling ToString
.
My question is this: when generating SQL queries, should I format numbers and the like using the invariant culture, or the SQL server's culture, or what? Which is to say, if my computer is set to German (Germany), which of these queries is right?
select foo from bar where baz = 123.45
or
select foo from bar where baz = 123,45
Likewise, if I use SQL's CAST
to convert a floating-point value to a string, what locale is SQL going to use for the conversion?
I did search the SQL docs, but so far I can't find any good answers. I did find some info about date formatting (SET DATEFORMAT and the like), but that's it.
NOTE: I realize that the preferred way to pass inputs to a SQL query is via parameters, so let's assume for argument's sake that I have a good reason to format them into the query string. Also, handing query inputs is only part of the broader question.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它会抛出一个错误。 SQL Server 的语言仅影响日期/时间值。
我在瑞士,必须处理所有这 3 个问题...
It will throw an error. The language of SQL Server only affects date/time values.
I'm in Switzerland and have to deal with all 3 of these...