【问题标题】:How to display the date as mm/dd/yyyy hh:mm Am/PM using sql server 2008 r2?如何使用 sql server 2008 r2 将日期显示为 mm/dd/yyyy hh:mm Am/PM?
【发布时间】:2013-02-22 09:31:53
【问题描述】:

我的示例查询是

SELECT D30.SPGD30_LAST_TOUCH_Y
from CSPGD30_TRACKING D30 

我给定的日期格式类似于"2013-01-01 00:00:00.000"。我需要将此日期格式转换为"mm/dd/yyyy hh:mm AM/PM"。你对此有什么想法吗?

【问题讨论】:

  • 你当前的列是日期时间格式吗?
  • @ashreva,是的,我当前的专栏是日期时间格式。你对此有什么想法吗?
  • @KasperVesth:你找到什么副本?? OP 要求datetime 格式为AM/PM。我在您提供的链接中没有看到 AM/PM 格式
  • @Satindersingh 我链接的帖子讨论了通过指定您使用的文化来更改一般的日期时间格式。

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2


【解决方案1】:

我认为没有单一的格式可以同时提供它们。使用Convert 试试这个; Sql-Demo

declare @mydate datetime = getdate()
select convert(varchar(10),@mydate, 101) + right(convert(varchar(32),@mydate,100),8)

|           COLUMN_0 |
----------------------
| 02/22/2013  9:36AM |

【讨论】:

  • 这确实有效@SHOHILSETHIA。您使用的是哪个版本的 SQL Server?
【解决方案2】:

FORMAT() 函数从 2012 版开始可用。 升级后就可以使用了

select FORMAT(@date,'MM/dd/yyyy hh:mm:s tt')

【讨论】:

  • SQL Server 2008 R2 中没有 - 未定义 Format 函数。
【解决方案3】:

使用这个

select CONVERT(VARCHAR(10), mydate, 101) + ' ' + RIGHT(CONVERT(VARCHAR, mydate, 100), 7) from tablename

【讨论】:

    【解决方案4】:

    试试这个

     SELECT convert(varchar(20), GetDate(), 0);
    

    仅提取 AM/PM

    substring(convert(varchar(30), GetDate(), 9), 25, 2);
    

    Fiddle

    【讨论】:

      【解决方案5】:

      使用以下方案获取日期、时间、日、月、年、小时、分钟、秒、AM/PM

      :)

      SELECT UpdatedOn ,
        CONVERT(varchar,UpdatedOn,100) DateTime,
        CONVERT(varchar,UpdatedOn,10) Date ,
        CONVERT(varchar,UpdatedOn,108) Time ,
        substring(CONVERT(varchar,UpdatedOn,106),1,2) Day,
        substring(CONVERT(varchar,UpdatedOn,106),4,3) CMonth,
        substring(CONVERT(varchar,UpdatedOn,105),4,2) NMonth,
        substring(CONVERT(varchar,UpdatedOn,106),8,4) Year,
        left(right(CONVERT(varchar,UpdatedOn,100),7),2) Hours_12,
        substring(CONVERT(varchar,UpdatedOn,108),1,2) Hours_24,
        substring(CONVERT(varchar,UpdatedOn,108),4,2) Minutes,
        substring(CONVERT(varchar,UpdatedOn,108),7,2) Second,
        right(CONVERT(varchar,UpdatedOn,100),2) AM_PM 
      FROM dbo.DeviceAssignSim 
      WHERE AssignSimId=55;
      

      【讨论】:

      • 虽然这可以回答问题,但由于不够简洁,它不是一个很好的解决方案。其他答案都更简洁,回答了问题。
      • 有更简单的解决方案 - 我应该如何在大查询中使用它
      【解决方案6】:

      你可以这样做:

      SELECT CONVERT(VARCHAR(10), GETDATE(), 101) AS [MM/DD/YYYY]
      

      更多信息请看:

      date-format

      【讨论】:

      • 如果我使用这种格式,它只显示“01/01/2013”​​。除此之外,我还需要“01/01/2013 12:23 PM”
      【解决方案7】:

      使用convert 方法格式化datetime 值。示例:

      select convert(varchar(20), D30.SPGD30_LAST_TOUCH_Y, 101)
      

      第三个参数决定格式。您可以在cast and convert documentation 中找到可用的格式。

      【讨论】:

      • 感谢您的回复,但它显示的格式为“01/01/2013”​​
      • @Adalarasan_Serangulam:是的,请查看可用格式的文档。
      【解决方案8】:

      使用这个

      Select (Convert(Varchar,GetDate(),101))+' '+(Right(('0'+(LTrim((Left((Right((Convert(Varchar,GetDate(),100)),7)),5))))),5))+' '+(Right((Convert(Varchar,GetDate(),100)),2))
      

      【讨论】:

        【解决方案9】:

        我知道这是一个 8 年前的问题,但答案很多,但都不够简单。我发现这很简单,并且与用户要求的内容相匹配(年份是两位数,并且存在秒数),假设他得到的日期来自 GETDATE(),这并不重要,但那是我的答案来自哪里。

        SELECT CONVERT(varchar, D30.SPGD30_LAST_TOUCH_Y, 22) AS [DateTime]

        12/16/20 10:19:18 AM
        

        【讨论】:

        • 在 2008R2 上,我刚刚对此进行了测试,并注意到用 GETDATE() 替换源列(上面的 D30.SPGD30_LAST_TOUCH_Y)是可行的。用日期字符串替换它会导致 AM/PM 被切断。接受的答案也发生了同样的事情。可能需要额外转换为日期时间才能使源字符串正常工作。
        猜你喜欢
        • 2017-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-20
        • 2020-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多