当值与字符串相互转换时,SQL Server 是否考虑文化/区域设置?

Cha*_*lie 2 sql sql-server culture

我正在尝试更新大型代码库以在格式化/解析值时正确指定CultureInfo和/或。IFormatProvider例如,当解析从用户那里获得的值时,我CultureInfo.CurrentCulture在调用 时传递TryParse,而当将浮点数转换为字符串以进行持久化时,我CultureInfo.InvariantCulture在调用 时传递ToString

我的问题是:生成 SQL 查询时,我应该使用不变区域性、SQL 服务器区域性还是什么来格式化数字等?也就是说,如果我的计算机设置为德语(德国),那么以下哪个查询是正确的?

select foo from bar where baz = 123.45
Run Code Online (Sandbox Code Playgroud)

或者

select foo from bar where baz = 123,45
Run Code Online (Sandbox Code Playgroud)

同样,如果我使用 SQLCAST将浮点值转换为字符串,SQL 将使用什么区域设置进行转换?

我确实搜索了 SQL 文档,但到目前为止我找不到任何好的答案。我确实找到了一些有关日期格式的信息(SET DATEFORMAT 等),但仅此而已。

注意:我意识到将输入传递给 SQL 查询的首选方法是通过参数,因此为了论证,我们假设我有充分的理由将它们格式化为查询字符串。此外,处理查询输入只是更广泛问题的一部分。

gbn*_*gbn 5

它会抛出一个错误。SQL Server 的语言仅影响日期/时间值。

\n\n
SET LANGUAGE Deutsch\nSELECT 'true' WHERE 1 <> 123,45\n\n--gives\nMsg 102, Level 15, State 1, Line 2\nFalsche Syntax in der N\xc3\xa4he von ','.\nThere is far too much ambiguity in number formats\n\nSET LANGUAGE Deutsch\nSELECT 'true' WHERE 1 <> 123.45\n--gives true\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在瑞士,必须处理所有这三个问题......

\n\n
    \n
  • 1.234,56(德国)
  • \n
  • 1'234,56(中文)
  • \n
  • 1,234.56(EN-GB)
  • \n
\n