我试图在SQL Server 2008中以2014年12月23日的格式获取日期。 我正在使用
CONVERT(VARCHAR(11),GETDATE(),106)
但它没有为日期部分添加任何后缀。 我在MySQL中发现了一个函数但在SQL服务器中很难。
答案 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