【问题标题】:Wrong locale in SQL Query resultsSQL 查询结果中的区域设置错误
【发布时间】:2011-01-13 19:56:47
【问题描述】:

我有一个 SQL Server 2005 数据库设置为区域设置土耳其语_CI_AS。 SQL Server 的 pc 的区域设置设置为土耳其语。土耳其语小数分隔符是“,”,千位分隔符是“.”。有一个数据类型为 decimal(14, 3) 的字段,它有一个值为“400,123”(即四百)的记录。当我在 SQL 管理器中使用 Open Table 时,结果网格中的值是正确的。但是当我在 SQL 查询窗口中查询表时,结果值为“400.123”,这是错误的。我的 Linq 查询结果中也出现了这个错误的结果。我应该怎么做才能得到正确的值?

【问题讨论】:

    标签: sql-server sql-server-2005


    【解决方案1】:

    尝试更改表列以指定 collat​​ion_name like Alter column myNogoodColation Collat​​e Turkey_BIN

    在这里寻求帮助:ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/56483d24-add7-483d-9b96-c6fda460ddbc.htm

    整理{ |数据库默认 } :: = { Windows_collat​​ion_name } | { SQL_collat​​ion_name }

    【讨论】:

    • 您似乎不能使用数据类型为小数的 BIN 排序规则:表达式类型小数对 COLLATE 子句无效。
    【解决方案2】:

    您使用的登录的默认语言是什么? 您可以通过选择 sys.server_principals 进行检查,或者询问 DBA 您是否无权查看该视图中的登录信息 http://msdn.microsoft.com/en-us/library/ms188786.aspx

    【讨论】:

    • 我查了一下,设置为“us_english”。 SELECT @@language 也说“us_english”(这些相关吗?)。
    【解决方案3】:

    我摆脱这个问题的唯一方法是将小数转换为字符串,将点替换为空字符串(也称为空字符串),然后将逗号替换为点。 如

    Replace(Replace(Cast(<value> as varchar(14)), '.', ''), ',', '.')
    

    不优雅,但有助于从 Excel 转换到我目前遇到问题的 SQL 服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多