2016-06-21 371 views
3

我最初看起来简单的日期格式的要求,但被证明是一种痛苦。我正在使用SQL Server 2012,但需要支持2008.SQL Server的具体日期格式年月日

查看参考(https://msdn.microsoft.com/en-GB/library/ms187928.aspx)我可以使用CONVERT将日期时间格式化为很多不同格式的字符串,但似乎无法获得DD MM YYYY没有解决方法。有没有包含在那个引用中的代码,我在某处丢失了?

解决方法,我可以看到如下所示的,但我显然并不热衷于使用这些是否有与T-SQL做一个明智的方式。

SELECT REPLACE(CONVERT(varchar, GETDATE(), 103), '/',' ') 
SELECT RIGHT('0' + CONVERT(varchar, DATEPART(dd, GETDATE())), 2) + ' ' + RIGHT('0' + CONVERT(varchar, DATEPART(mm, GETDATE())), 2) + ' ' + CONVERT(varchar, DATEPART(yyyy, GETDATE())) 

发表意见之后,一个例子输入日期将是21月2016(年= 2016年,月= 06,天= 21),为此所需的输出将是21 06 2016年

+0

请告诉我们您的样本数据,以及您所需要的输出。 – gofr1

+1

第一个有什么问题? –

+0

@gofr,不确定它是否添加了任何内容,但我包含了特定的日期示例。 –

回答

2

我d用你的第一个建议去做,似乎是最合适的;

制作一些测试数据;

IF OBJECT_ID('tempdb..#Dates') IS NOT NULL DROP TABLE #Dates 
GO 
CREATE TABLE #Dates (OriginalDate datetime) 
INSERT INTO #Dates (OriginalDate) 
VALUES 
('2016-01-01') 
,('2016-05-06') 
,('2016-08-09') 
,('2016-12-25') 

查询;

SELECT 
OriginalDate 
,REPLACE(CONVERT(varchar,OriginalDate,103),'/',' ') NewDate 
FROM #Dates 

结果;

OriginalDate    NewDate 
2016-01-01 00:00:00.000  01 01 2016 
2016-05-06 00:00:00.000  06 05 2016 
2016-08-09 00:00:00.000  09 08 2016 
2016-12-25 00:00:00.000  25 12 2016 
+0

感谢您的输入。我会在标记为答案的基础上,我也看不到任何更好的。真的很惊讶,它缺少一个标准格式。必须经常提出。 –

+0

不幸的是,它与斜线在一起,但与空格不一致。谢谢 –

3

日期格式DD MM YYYY是不是一个“官方”的格式(只有空格和没有句),因此没有在SQL Server中也没有这种格式的代码。

您可以使用问题中提到的解决方法或SQL Server 2012或更高版本中的FORMAT函数:FORMAT(GETDATE(), N'dd MM yyyy')

还有其他的解决办法,但他们都不是美丽的,包括这个玩意儿:RIGHT('0' + CONVERT(VARCHAR(2), DAY(@date)), 2) + ' ' + RIGHT('0' + CONVERT(VARCHAR(2), MONTH(@date)), 2) + ' ' + CONVERT(VARCHAR(4), YEAR(@date))

另一种选择是创建一个CLR函数和使用.NET格式化日期。 CLR自2005年起可用。

您可以创建一个日历表并添加一个具有所需格式的字段。您可以加入此表以获取每个日期的格式化字符串。

一般来说,格式化的结果不是SQL Server的责任,搬进这是使用数据的应用程序这一点。

+0

应用程序是SQL Server - 它正在更新报表中的非规范化值,作为更大批量的SQL的一部分。没有其他应用程序需要更新。 –

+0

更新其中包含格式化日期的单个字段(仅限日期)或与其他内容连接。 “一般”部分意味着,有时你不能避免在SQL Server之外执行它。 – Pred

相关问题