带有AM和PM的SQL 2012格式字符串文字

时间:2013-11-20 18:30:44

标签: sql sql-server tsql sql-server-2012 datetime-format

我一直在使用SQL Server 2012中提供的format()函数字符串文字,效果很好。不幸的是,我找不到任何好的资源来帮助我提出格式化日期时间文字的上午/下午。我正在使用此代码:

SELECT
CASE 
    WHEN CONVERT(DATE, GETDATE()) BETWEEN '2013-03-10' AND '2013-11-03'
        OR CONVERT(DATE, GETDATE()) BETWEEN '2014-03-09' AND '2014-11-02'
        OR CONVERT(DATE, GETDATE()) BETWEEN '2015-03-08' AND '2015-11-01'
        OR CONVERT(DATE, GETDATE()) BETWEEN '2016-03-13' AND '2016-11-06'
        OR CONVERT(DATE, GETDATE()) BETWEEN '2017-03-12' AND '2017-11-05'
        OR CONVERT(DATE, GETDATE()) BETWEEN '2018-03-11' AND '2018-11-04'
        OR CONVERT(DATE, GETDATE()) BETWEEN '2019-03-10' AND '2019-11-03'
        THEN format(dateadd(hh, -4, GETDATE()), 'MMMM d, yyyy h:mm EDT')
    ELSE format(dateadd(hh, -5, GETDATE()), 'MMMM d, yyyy h:mm EST')
END as process_finished

要获得此格式:

  

2013年11月20日美国东部时间1:28

当然,我希望它看起来像这样:

  

2013年11月20日美国东部时间下午1:28

关于代码的注意事项:我使用日期范围来正确显示美国东海岸的夏令时和标准时间。

谢谢!

1 个答案:

答案 0 :(得分:4)

您的格式字符串中缺少AM / PM指示符tt

    THEN format(dateadd(hh, -4, GETDATE()), 'MMMM d, yyyy h:mmtt EDT')
ELSE format(dateadd(hh, -5, GETDATE()), 'MMMM d, yyyy h:mmtt EST')

有关详细信息,请参阅Custom Date and Time Format Strings页面。