依赖于SQL语言的转换(数字到月份名称)

时间:2012-02-22 08:09:55

标签: sql-server-2005 tsql localization

我想将数字转换为月份名称,取决于语言。例如:

    印度尼西亚语中的
  • 1 = januari
  • 1 = 一月用中文。
  • 1 = gennaio ,意大利语。

怎么做?我的目的是转换为我的国家语言,即BAHASA MALAYSIA(JANUARI,FEBRUARI,MAC ... disember)。

3 个答案:

答案 0 :(得分:3)

您无法以这种方式在SQL Server中本地化:每个查询可以使用一种语言 此语言设置是DATENAME使用的

因此,除非您需要大量的查找表(每种语言一个),否则请在客户端上执行此操作。

DATENAME对某些语言也不可靠。见DATENAME(MONTH,GETADATE()) is returning numeric value of the month as '09'

SQL Server 2012通过FORMAT添加了一些文化设置,但您必须将其传递到SQL Server。就像我说的那样,在客户端做到这一点。

编辑:

通过SET LANGUAGE在SQL Server 2005中不支持Indonesian。

因此,对于一种语言,您需要一个CASE

CASE DATEPART(month, GETDATE())
  WHEN 1 THEN 'januari '
  WHEN 2 THEN '...'
  ...
END

否则,SET LANGUAGE或在客户端执行

答案 1 :(得分:1)

在我看来,如果你能避免本地化,就不应该在服务器/业务逻辑层面上进行本地化。因此,我会将存储过程中的日期/月份作为DATETIMEINT返回,并在处理数据的客户端中将此信息本地化。

答案 2 :(得分:0)

我不知道如何为您的数据库正确编写它。主要想法是:

result = to_char(date, MM)
result = REPLACE('1', "JANUARI", result)
result = REPLACE('2', "FEBRUARI", result)
....

至少在Oracle中,它可以在没有存储过程的情况下编写