【问题标题】:SQL Server Specific Date Format DD MM YYYYSQL Server 特定日期格式 DD MM YYYY
【发布时间】:2016-06-21 10:52:48
【问题描述】:

我有一个最初看起来很简单的日期格式要求,但事实证明这很痛苦。我使用的是 SQL Server 2012,但需要支持 2008。

查看参考 (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()))

在 cmets 之后,示例输入日期为 2016 年 6 月 21 日(年 = 2016,月 = 06,日 = 21),其所需输出为 2016 年 6 月 21 日。

【问题讨论】:

  • 请向我们展示您的数据样本,以及您需要什么输出。
  • 第一个有什么问题?
  • @RichBenner,除了它是 hacky 之外,没有什么特别的问题。试图确定是否有一个样式值可以与我缺少的 CONVERT 一起使用。
  • 您要使用的日期格式不是“官方”格式(未在任何日期/时间相关标准中列出),SQL Server 没有内置格式来获取它。如果您使用的是 SQL Server 2012 或更高版本,请检查 FORMAT 函数。
  • @ChrisDisley 当然,在 SQL 中这样做会很麻烦,我会尽可能在表示层中这样做。不过,我认为这将是您在 SQL 中执行此操作的最佳机会。

标签: sql-server tsql date datetime


【解决方案1】:

我会接受你的第一个建议,似乎是最合适的;

制作一些测试数据;

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

【讨论】:

  • 感谢您的意见。我将标记为答案,因为我也看不到更好的东西。只是对它作为标准格式的缺失感到非常惊讶。必须经常出现。
  • 它有斜线,但不幸的是没有空格。谢谢
【解决方案2】:

日期格式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 的责任,请将其移至正在使用数据的应用程序中。

【讨论】:

  • 应用程序是 SQL Server - 它正在更新报告表中的非规范化值,作为更大批量 SQL 的一部分。无需更新其他应用程序。
  • 更新带有格式化日期的单个字段(仅日期),或者它与其他内容连接。 In general 部分的意思是,有时您无法避免在 SQL Server 之外执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多