64

「StartTime」と「EndTime」などの 2 つのフィールドを持つ 1 つのテーブルがあります。2 つの列の DataType は Time です。

したがって、テーブルの値は次のようになります。

TableA:

            StartTime                EndTime
       ------------------         ----------------
        17:30:00.0000000          17:57:00.0000000

しかし、私は結果が必要です

            StartTime                EndTime
       ------------------         ----------------
            05:30 PM                 05:57 PM

テーブルを選択すると。AM PM形式で時間を取得するには?

4

13 に答える 13

96

SQL 2012 では、Format() 関数を使用できます。

https://technet.microsoft.com/en-us/library/hh213505%28v=sql.110%29.aspx

列の型が (datetime) の場合はキャストをスキップします。

例:

SELECT FORMAT(StartTime,'hh:mm tt') AS StartTime
FROM TableA
于 2015-08-14T15:16:01.847 に答える
85

次の構文を使用して、時刻を AM PM 形式に変換します。

フィールド名を次のクエリの値に置き換えます。

select CONVERT(varchar(15),CAST('17:30:00.0000000' AS TIME),100)
于 2012-05-31T06:45:44.287 に答える
16

これをプルするさまざまな方法を次に示します (必要に応じて)。

Time DataTypeの使用:

DECLARE @Time Time = '15:04:46.217'
SELECT --'3:04PM'
       CONVERT(VarChar(7), @Time, 0),

       --' 3:04PM' --Leading Space.
       RIGHT(' ' + CONVERT(VarChar(7), @Time, 0), 7),

       --' 3:04 PM' --Space before AM/PM.
       STUFF(RIGHT(' ' + CONVERT(VarChar(7), @Time, 0), 7), 6, 0, ' '),

       --'03:04 PM' --Leading Zero.  This answers the question above.
       STUFF(RIGHT('0' + CONVERT(VarChar(7), @Time, 0), 7), 6, 0, ' ')

       --'03:04 PM' --This only works in SQL Server 2012 and above.  :)
       ,FORMAT(CAST(@Time as DateTime), 'hh:mm tt')--Comment out for SS08 or less.

DateTimeデータ型の使用:

DECLARE @Date DateTime = '2016-03-17 15:04:46.217'
SELECT --' 3:04PM' --No space before AM/PM.
       RIGHT(CONVERT(VarChar(19), @Date, 0), 7),

       --' 3:04 PM' --Space before AM/PM.
       STUFF(RIGHT(CONVERT(VarChar(19), @Date, 0), 7), 6, 0, ' '),

       --'3:04 PM' --No Leading Space.
       LTRIM(STUFF(RIGHT(CONVERT(VarChar(19), @Date, 0), 7), 6, 0, ' ')),

       --'03:04 PM' --Leading Zero.
       STUFF(REPLACE(RIGHT(CONVERT(VarChar(19), @Date, 0), 7), ' ', '0'), 6, 0, ' ')

       --'03:04 PM' --This only works in SQL Server 2012 and above.  :)
       ,FORMAT(@Date, 'hh:mm tt')--Comment line out for SS08 or less.
于 2016-03-18T06:44:10.033 に答える
4
SELECT CONVERT(varchar, StartTime, 100) AS ST,
       CONVERT(varchar, EndTime, 100) AS ET
FROM some_table

また

SELECT RIGHT('0'+ LTRIM(RIGHT(CONVERT(varchar, StartTime, 100),8)),8) AS ST,
       RIGHT('0'+ LTRIM(RIGHT(CONVERT(varchar, EndTime, 100),8)),8) AS ET
FROM some_table
于 2012-05-31T06:43:55.303 に答える
3
> SELECT CONVERT(VARCHAR(30), GETDATE(), 100) as date_n_time
> SELECT CONVERT(VARCHAR(20),convert(time,GETDATE()),100) as req_time
> select convert(varchar(20),GETDATE(),103)+' '+convert(varchar(20),convert(time,getdate()),100)

> Result (1):- Jun  9 2018 11:36AM
> result(2):-  11:35AM
> Result (3):-  06/10/2018 11:22AM
于 2018-06-09T06:08:14.507 に答える
1

これを試して:

select CONVERT(VARCHAR(5), ' 4:07PM', 108) + ' ' + RIGHT(CONVERT(VARCHAR(30), ' 4:07PM', 9),2) as ConvertedTime
于 2014-07-29T08:35:46.087 に答える
1

複数の機能がありますが、これで必要なものが得られます (SQL Server 2008 でテスト済み)

編集:以下は、timeタイプだけでなく、 adatetimeでも同様に機能します。

SELECT SUBSTRING(CONVERT(varchar(20),StartTime,22), 10, 11) AS Start, SUBSTRING(CONVERT(varchar(20),EndTime,22), 10, 11) AS End FROM [TableA];

于 2012-05-31T06:46:51.130 に答える
0

上記の@Saikhの回答である2番目のオプションを使用すると、時間自体とAMまたはPMの間にスペースを追加できます。

REVERSE(LEFT(REVERSE(CONVERT(VARCHAR(20),CONVERT(TIME,myDateTime),100)),2) + ' ' + SUBSTRING(REVERSE(CONVERT(VARCHAR(20),CONVERT(TIME,myDateTime),100)),3,20)) AS [Time],

面倒なことはわかっていますが、それが私が選んだ解決策です。CONVERT() がそのスペースを自動的に追加しないのは奇妙です。SQL Server 2008 R2

于 2019-02-06T03:48:56.160 に答える