【问题标题】:How do i show just the time with AM or PM from a field that is a datetime format?如何从日期时间格式的字段中仅显示 AM 或 PM 的时间?
【发布时间】:2011-10-21 13:48:37
【问题描述】:

我在 SQL 中有一列数据,目前是日期时间格式。如果需要,它可以更改。我只需要显示一天中的时间,精确到 10 秒,同时附上 AM 或 PM。我不希望在这种情况下显示日期。

因此,我需要“11:45:59.8 AM”而不是“1900-01-01 11:45:59.800”作为示例。
此外,这不是当前的“getdate”时间。它来自我称之为“时间”的数据领域 我在网上看到了各种各样的转换格式,但没有一个能帮我解决这个问题。

谢谢!!!!

【问题讨论】:

  • 在 SQL 中使用特定格式将日期转换为字符串完全取决于您的 SQL 版本(您使用的是哪个 RDBMS?)。此外,通常更建议在您的客户端而不是在 SQL 服务器中进行格式化(在数据库中保持数据类型为真,并且格式化位于应用程序的顶层。)

标签: sql sql-server-2008 datetime


【解决方案1】:

在我的评论中,我建议你不要这样做。

SQL Server 是一个存放数据的地方,为了显示目的而转换数据通常会模糊可能会再次困扰您的界限。 (一个例子;如果您将来需要将那个时间作为 Time 怎么办。您要再次将它从字符串转换回来吗?)

如果是必要的,那么你必须自己做一些格式化。

SELECT
  RIGHT(CONVERT(VARCHAR(26), GETDATE(), 109), 14)

或者,更混乱......

SELECT
  DATEPART(HOUR, GETDATE()) + ':' +
  DATEPART(MINUTE, GETDATE()) + ':' +
  DATEPART(SECOND, GETDATE()) + '.' +
  DATEPART(MILLISECOND, GETDATE()) +
  CASE WHEN DATEPART(HOUR, GETDATE()) < 12 THEN 'AM' ELSE 'PM' END


我说了吗?你最好在客户端这样做;)

【讨论】:

  • 谢谢!我在 SQL 中这样做的原因是:我有一个 SSIS 包,它正在获取这个日期时间,并在发送给客户的电子邮件中显示它。所以最终结果是在这封电子邮件中显示来自创建的数据变量的数据是 SQL。但是,是的,否则我同意你的看法。我会试试看!
  • 您需要将 DATEPART() 包裹在 CONVERT() 中,否则会出现转换错误:Conversion failed when convert the varchar value ':' to data type int.
【解决方案2】:

重命名表格字段,Time 是保留字,维护起来会很痛苦。如果您需要毫秒精度,请确保您使用的是新的 datetime2 数据类型。

要格式化时间部分,请使用:

SELECT CONVERT(TIME, [Time]) FROM [Your Table]

如果您只想要句号后的三位数字,您可以使用:

SELECT CONVERT(TIME(3), [Time]) FROM [Your Table] 

【讨论】:

  • 这并没有真正解决格式问题,它仍然是一种非字符串数据类型,需要转换(隐式或显式)才能显示......
  • @Dems - 是的,但正如您在评论中所说的那样,格式应该真的在数据库之外完成。 :)
【解决方案3】:

如果你想获得 HH:MM 格式,我认为这会起作用

SELECT
  RIGHT(CONVERT(VARCHAR(26), GETDATE(), 117), 14)

更多格式也可以参考这个页面

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc36271.1570/html/blocks/X41864.htm

【讨论】:

    猜你喜欢
    • 2012-02-11
    • 2016-09-15
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多