未以2014年12月23日格式在SQL Server中获取日期

时间:2014-12-23 13:46:22

标签: sql-server sql-server-2008

我试图在SQL Server 2008中以2014年12月23日的格式获取日期。 我正在使用

CONVERT(VARCHAR(11),GETDATE(),106)

但它没有为日期部分添加任何后缀。 我在MySQL中发现了一个函数但在SQL服务器中很难。

2 个答案:

答案 0 :(得分:0)

在SQL Server 2012+中,您可以使用FORMAT函数以与.NET相同的方式格式化字符串,例如:

declare @d datetime=GETDATE()
SELECT FORMAT ( @d, 'D', 'en-gb' ) 

SELECT FORMAT ( @d, 'dd MMMM yyyy') 

以前的版本没有良好的格式化支持,唯一的另一个选择是提取各种日期部分的名称以使用DATENAME构造最终字符串,例如:

select datename(day,@d) + ' ' +  datename(month,@d) +  ' ' + datename(year,@d) 

也就是说,最好将强类型日期值返回给客户端或报告引擎,并让转换发生在客户端,而不是SQL中。这可以避免转换错误和性能问题

答案 1 :(得分:0)

这适用于所有版本的SQL Server:

CREATE FUNCTION dbo.DateString
(
    @Date datetime
)
RETURNS varchar(50)
AS
BEGIN
    DECLARE @Day    varchar(10) = DATENAME(DAY, @Date)
    DECLARE @Month  varchar(20) = DATENAME(MONTH, @Date)
    DECLARE @Year   varchar(4)  = DATENAME(YEAR, @Date)

    SET @Day = @Day + CASE
                        WHEN RIGHT(@Day,1) = '1' THEN 'st'
                        WHEN RIGHT(@Day,1) = '2' THEN 'nd'
                        WHEN RIGHT(@Day,1) = '3' THEN 'rd'
                        ELSE 'th'
                      END
    RETURN @Day + ' ' + @Month + ' ' + @Year
END