Sql server SQL Server特定的日期格式DD MM YYYY

Sql server SQL Server特定的日期格式DD MM YYYY,sql-server,tsql,date,datetime,Sql Server,Tsql,Date,Datetime,我有一个日期格式要求,最初看起来很简单,但事实证明这是一个难题。我使用的是SQL Server 2012,但需要支持2008 查看reference(),我可以使用CONVERT以多种不同的格式将日期时间格式化为字符串,但如果没有解决方法,我似乎无法获得DD-MM-yyy。有没有我在某个地方遗漏的代码没有包含在引用中 我可以看到的解决方法如下,但如果有一种明智的方法使用T-SQL,我显然不想使用这些方法 SELECT REPLACE(CONVERT(varchar, GETDATE(), 103

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

查看reference(),我可以使用CONVERT以多种不同的格式将日期时间格式化为字符串,但如果没有解决方法,我似乎无法获得DD-MM-yyy。有没有我在某个地方遗漏的代码没有包含在引用中

我可以看到的解决方法如下,但如果有一种明智的方法使用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()))

根据评论,示例输入日期为2016年6月21日(年=2016,月=06,日=21),期望输出为2016年6月21日。

我同意你的第一个建议,似乎最合适

制作一些测试数据

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

日期格式
DD-MM-YYYY
不是“官方”格式(只有空格,没有句点),因此在SQL Server中没有格式代码

您可以使用SQL Server 2012或更高版本中的问题或函数中提到的变通方法:
格式(GETDATE(),N'dd-MM-yyy')

还有其他的解决办法,但没有一个是漂亮的,包括这个装置:
RIGHT('0'+转换(VARCHAR(2),DAY(@date)),2)+''+RIGHT('0'+转换(VARCHAR(2),MONTH(@date)),2)+'+转换(VARCHAR(4),YEAR(@date))

另一个选项是创建一个CLR函数,并使用.NET格式化日期。CLR从2005年开始提供

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


一般来说,格式化结果不是SQL Server的责任,请将其移动到使用数据的应用程序中。

请向我们展示您的数据示例,以及您需要的输出。第一个有什么问题?@RichBenner,没有什么特别的问题,只是它有黑客行为。正在尝试确定是否存在我丢失的可用于转换的样式值。您要使用的日期格式不是“正式”格式(未在任何与日期/时间相关的标准中列出),SQL Server没有内置格式来获取该格式。如果您使用的是SQL Server 2012或更高版本,请检查该函数。@ChrisDisley当然,在SQL中执行此操作会很麻烦,我会尽可能在表示层中执行此操作。我认为这将是您在SQL中实现这一点的最佳机会。谢谢您的输入。我会根据我也看不到更好的答案来打分。我真的很惊讶它没有作为标准格式。必须经常出现。不幸的是,这里有斜线,但没有空格。感谢应用程序是SQL Server—它正在更新报告表中的非规范化值,作为更大一批SQL的一部分。没有要更新的其他应用程序。正在使用格式化日期(仅日期)更新单个字段,或者将其与其他内容连接起来。一般来说,
部分意味着,有时您无法避免在SQL Server之外执行此操作。