【发布时间】:2009-04-03 07:22:01
【问题描述】:
我需要以这样的方式编写 sql 查询,它会以以下格式检索日期 dd MM yyyy HH mm ss AM(或 PM)
例如 31 12 2009 12 45 06 安
【问题讨论】:
标签: sql sql-server datetime formatting
我需要以这样的方式编写 sql 查询,它会以以下格式检索日期 dd MM yyyy HH mm ss AM(或 PM)
例如 31 12 2009 12 45 06 安
【问题讨论】:
标签: sql sql-server datetime formatting
我建议在中间层/层或客户端格式化字符串。用各种格式化方法就简单多了……这是表示要求,那你为什么不在表示层格式化呢?
【讨论】:
你可以看看 MSDN 上的CAST and CONVERT。
SELECT CONVERT(VARCHAR(30), datetime_field, 130) AS formatted_date
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
【讨论】:
如果您使用的是 SQL 2005 和 2008,一个好方法是编写一个 CLR 过程来为您进行格式化。 .NET 框架为各种数据类型提供了非常强大的格式化例程,当您想要在数据库级别进行格式化时,利用它们是有意义的。
尽管这是否应该是这种情况当然值得商榷。鉴于数据库的主要工作是存储和检索数据,我可以理解 SQL Server 团队不向后弯腰以支持灵活格式化的理由。
【讨论】:
使用 DATE_FORMAT 函数。以下是格式参考: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format
【讨论】: