web-dev-qa-db-ger.com

Konvertieren Sie den Zeitdatentyp in AM PM Format:

Ich habe eine Tabelle mit zwei Feldern wie "StartTime" und "EndTime". Der Datentyp der zwei Spalten ist Zeit.

Die Werte der Tabelle sehen also wie folgt aus:

TableA:

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

Aber ich brauche das Ergebnis als 

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

Wenn ich die Tabelle auswähle. Wie bekomme ich Zeit im AM PM Format?

45
thevan

Verwenden Sie folgende Syntax, um eine Uhrzeit in das AM PM -Format zu konvertieren.

Ersetzen Sie den Feldnamen durch den Wert in der folgenden Abfrage.

select CONVERT(varchar(15),CAST('17:30:00.0000000' AS TIME),100)
56

In SQL 2012 können Sie die Funktion Format () verwenden.

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

Überspringen Sie das Casting, wenn der Spaltentyp (datetime) ist.

Beispiel:

SELECT FORMAT(StartTime,'hh:mm tt') AS StartTime
FROM TableA
58
Dennis

Hier sind die verschiedenen Möglichkeiten, wie Sie dies nutzen können (abhängig von Ihren Bedürfnissen).

Verwenden des TimeDataType:

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.

Verwenden des DateTime DataType:

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.
11
MikeTeeVee
SELECT CONVERT(varchar, StartTime, 100) AS ST,
       CONVERT(varchar, EndTime, 100) AS ET
FROM some_table

oder

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
4
Darshana
select case 
      when DATEPART(hour,'17:30:00.0000000') > 12 
      then cast((DATEPART(hour,'17:30:00.0000000') - 12) as varCHAR(2)) + ':' + cast(DATEPART(minute,'17:30:00.0000000') as varCHAR(2)) + ' PM'
      else cast(DATEPART(hour,'17:30:00.0000000') as varCHAR(2)) + ':' + cast(DATEPART(minute,'17:30:00.0000000') as varCHAR(2)) + ' PM'
   end
2
juergen d

Dies kehrt zurück wie 11:30 Uhr

select CONVERT(VARCHAR(5), FromTime, 108) + ' ' + RIGHT(CONVERT(VARCHAR(30), FromTime, 9),2)
from tablename
2
jejendran
> 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
2
Saikh Rakif

Versuche dies:

select CONVERT(VARCHAR(5), ' 4:07PM', 108) + ' ' + RIGHT(CONVERT(VARCHAR(30), ' 4:07PM', 9),2) as ConvertedTime
1
user3851829

Mehrere Funktionen, aber dies gibt Ihnen das, was Sie brauchen (getestet auf SQL Server 2008)

Edit: Das Folgende funktioniert nicht nur für einen time -Typ, sondern auch für einen datetime.

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

1
JNF
    select right(convert(varchar(20),getdate(),100),7)
0
SayanKrSwar

Versuche dies:

select CONVERT(varchar(15),CAST('2014-05-28 16:07:54.647' AS TIME),100) as CreatedTime
0
user3851829

Mit der Antwort von @ Saikh oben, der zweiten Option, können Sie ein Leerzeichen zwischen der Uhrzeit selbst und dem AM oder PM einfügen.

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

Unordentlich weiß ich, aber es ist die Lösung, die ich gewählt habe. Seltsam, dass CONVERT () diesen Platz nicht automatisch hinzufügt. SQL Server 2008 R2

0
Fandango68