SQL Server 在将值转换为字符串/从字符串转换时是不是考虑文化/区域设置?
Posted
技术标签:
【中文标题】SQL Server 在将值转换为字符串/从字符串转换时是不是考虑文化/区域设置?【英文标题】:does SQL Server consider culture/locale when converting values to/from strings?SQL Server 在将值转换为字符串/从字符串转换时是否考虑文化/区域设置? 【发布时间】:2009-04-13 22:39:50 【问题描述】:我正在尝试更新大型代码库以在格式化/解析值时正确指定 CultureInfo
和/或 IFormatProvider
。例如,在解析从用户那里获得的值时,我在调用TryParse
时传递CultureInfo.CurrentCulture
,当将浮点数转换为字符串以进行持久化时,我在调用ToString
时传递CultureInfo.InvariantCulture
。
我的问题是:在生成 SQL 查询时,我应该使用不变的文化或 SQL 服务器的文化来格式化数字等吗?也就是说,如果我的电脑设置为 German(德国),这些查询哪个是对的?
select foo from bar where baz = 123.45
或
select foo from bar where baz = 123,45
同样,如果我使用 SQL 的 CAST
将浮点值转换为字符串,SQL 将使用什么语言环境进行转换?
我确实搜索了 SQL 文档,但到目前为止我找不到任何好的答案。我确实找到了一些有关日期格式的信息(SET DATEFORMAT 等),但仅此而已。
注意:我意识到将输入传递给 SQL 查询的首选方式是通过参数,所以为了论证的缘故,我们假设我有充分的理由将它们格式化为查询字符串。此外,处理查询输入只是更广泛问题的一部分。
【问题讨论】:
可能有帮助:***.com/questions/353545/… 【参考方案1】:它会抛出一个错误。 SQL Server 的语言只影响日期/时间值。
SET LANGUAGE Deutsch
SELECT 'true' WHERE 1 <> 123,45
--gives
Msg 102, Level 15, State 1, Line 2
Falsche Syntax in der Nähe von ','.
There is far too much ambiguity in number formats
SET LANGUAGE Deutsch
SELECT 'true' WHERE 1 <> 123.45
--gives true
我在瑞士,必须处理所有这 3 个问题...
1.234,56(德国) 1'234,56 (CH) 1,234.56 (EN-GB)【讨论】:
以上是关于SQL Server 在将值转换为字符串/从字符串转换时是不是考虑文化/区域设置?的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 中读取 JSON 数据时无法从字符串转换为日期时间