如何修改Hana SQL查询会话或连接的数字格式?



对于使用SAPB1和HanaDB的客户,我们执行相同的查询以提取数据(使用ADO)。网络接口)。有些有他们的区域系统系统,似乎根据他们的区域设置控制数字格式,等等。

说,例如当执行:SELECT RDR1."Quantity" FROM RDR1

  • 对于美国的客户,RDR1."Quantity"= 2.000000
  • 某德国客户,RDR1.&; quantity &;= 2,000000(注意逗号和小数)

我假设值的实际数据库存储是相同的,只是查询引擎根据设置应用默认系统格式,使最终结果以这种或那种方式格式化。

现在,使用蛮力方法和每列可以进行这种类型的更改:REPLACE(CAST(ROUND(RDR1."Quantity",2) AS DECIMAL(10,2)), ',', '.') AS "Quantity”给我"2.00">

然而,我们有很多这样的列,我们想让代码在所有情况下都可用,而不是在不同地区有多个相同查询的实例——似乎应该有一种方法告诉查询引擎返回值,就像它在美国一样,忽略默认的系统区域设置和货币设置。

问题:是否有可能在我们建立ADO时使用Hana SQL查询代码(如会话变量或其他东西)或连接设置来进行高级设置更改,而不是每列格式化/强制转换?. NET连接到HanaDB,这将只是使值出来,如果他们在美国?

我还没有找到,但可能在文档中不太容易找到如何处理它。

不,没有任何HANA设置可以定义应用程序(在您的示例中是SAP Business One)如何将数据呈现给用户屏幕。

对于SAP B1,您可以在这里找到设置这些用户设置的文档。这些设置包括"千位分隔符"、"分隔符"、"小数点"等。

但是在HANA DB级别,没有全局设置。

同样,REPLACE解决方案提到将输入数字数据转换为字符串,失去所有数字语义(排序,数学运算)并增加这些值的内存需求。如果可能,最好避免这种技术。

如果要更改程序输出的小数分隔符,只需告诉. net即可。一个选项是设置当前线程的区域性,如下所示:

using System;
using System.Globalization;
class Program
{
static void Main(string[] args)
{
decimal d = 2021.1002m;

Console.WriteLine("Current Culture is {0}.", System.Threading.Thread.CurrentThread.CurrentCulture.Name);
Console.WriteLine("d = {0}.", d);

System.Threading.Thread.CurrentThread.CurrentCulture =
new CultureInfo("en-US");

Console.WriteLine("Current Culture now is {0}.", System.Threading.Thread.CurrentThread.CurrentCulture.Name);
Console.WriteLine("And d = {0}.", d);
}
}

我的输出是:

Current Culture is es-ES.
d = 2021,1002.
Current Culture now is en-US.
And d = 2021.1002.

最新更新