在sql中将日期转换为西班牙语

时间:2013-05-23 21:24:02

标签: sql sql-server-2005

我正在运行一份包含多个英文字段的报告。我在报告的末尾有两个日期字段,一个必须是英文,另一个是西班牙语。日期需要的格式是2012年11月1日。我需要西班牙语是2012年11月1日。我无法用西班牙语生成报告的最后一个字段。我在sql server 2005中运行。

4 个答案:

答案 0 :(得分:2)

也许很麻烦,但我不知道如何以更简单的方式做到这一点。

首先,创建一个函数。此函数将使用system view sys.syslanguages以西班牙语获取正确的月份名称。参数是有效的日期和语言(sys.syslanguage视图中的别名)。

CREATE FUNCTION [dbo].[fn_GetMonthName] (
    @Date DATETIME,
    @Language NVARCHAR(100)
)
RETURNS NVARCHAR(400)
AS
BEGIN
    DECLARE @i INT, @m INT,@mlist NVARCHAR(1000)
    SET @m = MONTH(@Date)
    SET @mlist = (SELECT months FROM sys.syslanguages WHERE ALIAS = @language)
    SET @i = 1
    WHILE(@i < @m)
        BEGIN
           SET @mlist = REPLACE(@mlist, SUBSTRING(@mlist,1,CHARINDEX(',',@mlist)) ,'')
           SET @i = @i + 1
        END
    SET @mlist = (CASE CHARINDEX(',',@mlist) WHEN 0 THEN @mlist ELSE SUBSTRING(@mlist,0,CHARINDEX(',',@mlist) ) END )
    RETURN @mlist
END
GO

然后在任何需要的地方调用该函数:

SELECT CONVERT(VARCHAR(20), GETDATE(), 100) AS CurrentDate,
       dbo.fn_GetMonthName (GETDATE(), 'Spanish') AS [Mes-Month]

结果:

      CurrentDate       Mes-Month
 May 24 2013 12:02AM      Mayo

取自Get Language specific Month Name from SQL

答案 1 :(得分:0)

看看:http://www.sqlservercurry.com/2010/11/change-default-language-for-sql-server.html

您可以暂时将语言设置为西班牙语,但不确定这对您有多可行。另一种方法是编写你自己的月份函数,然后可以传递第二个参数,然后决定输出是什么。

答案 2 :(得分:0)

此函数将根据sys.syslanguages表格在字符串中翻译月份。

即。 SELECT dbo.fn_tranMonth(2,0,'1 déc. 2014 10:26:14 UTC+00:00')

结果:

2014年12月1日10:26:14 UTC + 00:00

CREATE FUNCTION [dbo].[Split] (@sep char(1), @s varchar(8000))
RETURNS table
AS
RETURN (
    WITH Pieces(pn, start, stop) AS (
      SELECT 1, 1, CHARINDEX(@sep, @s)
      UNION ALL
      SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
      FROM Pieces
      WHERE stop > 0
    )
    SELECT 
      SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
    FROM Pieces
  )

GO

CREATE FUNCTION dbo.fn_tranMonth
(
    @fromLan INT
    ,@toLan INT
    ,@string VARCHAR(MAX)
)
RETURNS 
    VARCHAR(50)
AS
BEGIN
    DECLARE @TTTT AS TABLE(PK INT IDENTITY(1,1)
        ,fromMonth VARCHAR(50)
        ,toMonth VARCHAR(50)
        )

    DECLARE 
        @fromMonths VARCHAR(200)
        ,@toMonths VARCHAR(200)
        ,@fromMonth VARCHAR(20)
        ,@toMonth VARCHAR(20)
        ,@rowNum INT=12;

    SELECT @fromMonths=shortmonths
    FROM SYS.syslanguages
    WHERE langid=@fromLan;

    SELECT @toMonths=shortmonths
    FROM sys.syslanguages
    WHERE langid=@toLan;

    INSERT @TTTT(fromMonth)
    SELECT S 
    FROM dbo.Split(',',@fromMonths);

    DECLARE @TTTT2 AS TABLE(PK INT IDENTITY(1,1)
        ,toMonth VARCHAR(50)
        )

    INSERT @TTTT2(toMonth)
    SELECT S 
    FROM dbo.Split(',',@toMonths);

    UPDATE @TTTT
        SET toMonth=B.toMonth
    FROM
        @TTTT A
        JOIN @TTTT2 B ON A.PK=B.PK;

    DECLARE 
        @loopPos INT=0
        ,@returnMonth VARCHAR(50);

    WHILE @loopPos<@rowNum
        BEGIN
            SET @loopPos+=1;
            SELECT 
                @fromMonth=fromMonth
                ,@toMonth=toMonth
            FROM @TTTT
            WHERE PK=@loopPos;

            SET @string=REPLACE(@string,@fromMonth,@toMonth);
        END;

    RETURN @string;
END

答案 3 :(得分:0)

试试这个:

SELECT CONVERT(VARCHAR(10),GETDATE(), 103)

这段代码,返回一个带有日期ENESPAÑOL的VARCHAR(10),leches。

IDEA(使用的分隔符:' - '):

  1. 获取格式YYYY-MM-DD NVARCHAR(10)。
  2. 获取格式DD-MM-YYYY nvarchar(10)
  3. 使用功能
  4. 样品:

    select dbo.date2txt(GETDATE ())
    

    创建功能:

     create function [dbo].[AFecha] (
         @fecha NVARCHAR(10)
     )
     returns NVARCHAR(10)
     as
     begin
     Declare @r nvarchar(10)
     if substring(@Fecha,3,1) = '-'
       set @r = @Fecha
     else
         set @r = substring(@fecha,9,2)+'-'+substring(@fecha,6,2)+'-'+left(@fecha,4)
     Return @r
     End
    go
    
    
    
    create FUNCTION [dbo].[NTSDate](@fecha DateTime) 
     RETURNS nVarChar(10) AS
      BEGIN
     DECLARE @salida nVarChar(10)
     set @salida =  STR(year(@fecha),4,0) + '-' + RIGHT('0' +  LTRIM(month(@fecha)),2) + '-'  + RIGHT('0' + LTRIM(day(@fecha)),2)
     return (@salida)
     End
    
    go
    
    
    ALTER function [dbo].[Date2Txt](@Fecha as datetime) returns nvarchar(10)
    as
    begin
    return dbo.afecha(dbo.NTSDate(@Fecha))
    end
    
    go