SQL中的日期时间格式

SQL中的日期时间格式,sql,sql-server,datetime,formatting,Sql,Sql Server,Datetime,Formatting,我需要以这样一种方式编写sql查询,它将以以下格式检索日期 dd MM yyyy HH MM ss AM(或PM) 乙二醇 31 12 2009 12 45 06使用日期格式功能。以下是格式参考: 您可以在MSDN上查看 130会将日期转换为以下格式:dd-mon-yyyy-hh:mi:ss:mmmAM(或PM)这样很难让它更低效,但下面是 DECLARE @GetDate DATETIME SET @GetDate = '01-01-2009 13:10:20' SELECT CAST(

我需要以这样一种方式编写sql查询,它将以以下格式检索日期 dd MM yyyy HH MM ss AM(或PM)

乙二醇
31 12 2009 12 45 06使用日期格式功能。以下是格式参考: 您可以在MSDN上查看


130会将日期转换为以下格式:dd-mon-yyyy-hh:mi:ss:mmmAM(或PM)

这样很难让它更低效,但下面是

DECLARE @GetDate DATETIME
SET @GetDate = '01-01-2009 13:10:20'
SELECT 
  CAST(DATEPART(dd, @GETDATE) AS VARCHAR(2)) + ' '
  + CAST(DATEPART(mm, @GETDATE) AS VARCHAR(2)) + ' '
  + CAST(DATEPART(yyyy, @GETDATE) AS VARCHAR(4)) + ' '
  + CAST(DATEPART(hh, @GETDATE)%12 AS VARCHAR(2)) + ' '
  + CAST(DATEPART(mi, @GETDATE) AS VARCHAR(2)) + ' '
  + CAST(DATEPART(ss, @GETDATE) AS VARCHAR(2)) + ' '
  + CASE WHEN DATEPART(hh, @GETDATE) > 12 THEN 'AM' ELSE 'PM' END

如果您使用的是SQL2005和2008,一个好方法是编写一个CLR过程来为您进行格式化。NET framework具有针对各种数据类型的非常强大的格式化例程,当您想要在数据库级别进行格式化时,利用它们是有意义的


当然,如果情况确实如此的话,这一点也值得商榷。考虑到数据库的主要任务是存储和检索数据,我可以理解SQL Server团队不支持灵活格式的基本原理。

我建议在中间层/层或客户端格式化字符串。使用各种格式方法会容易得多。。。这是一个演示要求,为什么不在演示层设置格式呢?

嗨,列表中没有这种格式dd-MM-yyy-HH-MM-ss-AM(或PM)我认为转换为datetime样式130最接近您请求的日期不应该是:DATEPART(HH,@GETDATE)<12然后是'AM'?@Zaagmans-老实说,我不知道。上午/下午是我无法记住的事情之一。如果我在中午之后,你是对的。如果下午已经过了正午,你就错了+1不知道为什么应该降级。这是可靠的建议。
DECLARE @GetDate DATETIME
SET @GetDate = '01-01-2009 13:10:20'
SELECT 
  CAST(DATEPART(dd, @GETDATE) AS VARCHAR(2)) + ' '
  + CAST(DATEPART(mm, @GETDATE) AS VARCHAR(2)) + ' '
  + CAST(DATEPART(yyyy, @GETDATE) AS VARCHAR(4)) + ' '
  + CAST(DATEPART(hh, @GETDATE)%12 AS VARCHAR(2)) + ' '
  + CAST(DATEPART(mi, @GETDATE) AS VARCHAR(2)) + ' '
  + CAST(DATEPART(ss, @GETDATE) AS VARCHAR(2)) + ' '
  + CASE WHEN DATEPART(hh, @GETDATE) > 12 THEN 'AM' ELSE 'PM' END