web-dev-qa-db-ja.com

SQLのDateTimeフィールドの時刻部分

SQLでDateTimeフィールドの時刻部分を抽出するにはどうすればよいですか?私のプロジェクトでは、日付が何であっても、DateTimeフィールドのタイムスタンプが午後5時のデータを返す必要があります

45
ghost_king

SQL Serverでhh:miのみが必要な場合は、次を使用できます。

DECLARE @datetime datetime

SELECT @datetime = GETDATE()

SELECT RIGHT('0'+CAST(DATEPART(hour, @datetime) as varchar(2)),2) + ':' +
       RIGHT('0'+CAST(DATEPART(minute, @datetime)as varchar(2)),2)
32
András Ottó

これは時間のみを返します

SQL Serverの場合:

SELECT convert(varchar(8), getdate(), 108)

説明:

getDate()は現在の日付と時刻を示しています。
108は、必要な部分(この場合は時間)をフォーマット/提供しています。
varchar(8)は、その部分の文字数を示します。
いいね:
そこにvarchar(7)と書いた場合、00:00:0が得られます
そこにvarchar(6)と書いた場合、00:00:が得られます
そこにvarchar(15)と書いた場合、それはちょうど時間部分の出力を与えているので、00:00:00を与えます。 SQLFiddle Demo

MySQLの場合:

SELECT DATE_FORMAT(NOW(), '%H:%i:%s')

SQLFiddleデモ

53
John Woo

日時の1時間のみが必要な場合は、DATEPART()-SQL Serverを使用できます。

declare @dt datetime
set @dt = '2012-09-10 08:25:53'

select datepart(hour, @dt) -- returns 8

SQL Server 2008+では、時間としてCAST()できます:

declare @dt datetime
set @dt = '2012-09-10 08:25:53'

select CAST(@dt as time) -- returns 08:25:53
26
Taryn

SQL Server 2008でこれを試してください。

select *
from some_table t
where convert(time,t.some_datetime_column) = '5pm'

ランダムな日時値を取得し、時刻コンポーネントが午後5時になるように調整する場合、SQL Server 2008にはいくつかの方法があります。まず、1日の始まりが必要です(例:2011-09-30 00:00:00.000)。

  • Microsoft SQL ServerのすべてのバージョンとSybaseのすべてのバージョンで機能する1つの手法は、convert/3を使用して、datetime値を時間コンポーネントのないvarcharに変換し、datetime値に戻すことです。

    select convert(datetime,convert(varchar,current_timestamp,112),112)
    

上記は、今日の1日の始まりを示します。

  • ただし、SQL Server 2008では、次のように言うことができます。

    select start_of_day =               t.some_datetime_column
                        - convert(time, t.some_datetime_column ) ,
    from some_table t
    

    これはおそらく高速です。

一日の始まりがあれば、午後5時までは簡単です。開始時刻の値に17時間を追加するだけです。

select five_pm = dateadd(hour,17, t.some_datetime_column
                   - convert(time,t.some_datetime_column)
                   )
from some_table t
8
Nicholas Carey

これは古い質問ですが、他の質問はすべて答えているので

  • (日時ではなく)文字列を返します。
  • 日付の内部表現に依存する(float、int、およびbackへの変換)または
  • sQL Server 2008以降が必要です。

日時操作のみを必要とし、SQL Server 2005+で動作する「純粋な」オプションを追加すると思いました。

SELECT DATEADD(dd, -DATEDIFF(dd, 0, mydatetime), mydatetime)

これにより、日付ゼロ(1900-01-01)と指定された日付の差(全日数)が計算され、指定された日付からその日数が減算されて、日付コンポーネントがゼロに設定されます。

7
Heinzi

この場合、CONVERT(TIME,GETDATE())を使用できます。

INSERT INTO infoTbl
(itDate, itTime)
VALUES (GETDATE(),CONVERT(TIME,GETDATE()))

または、印刷するか、その時間を返す場合は、次のように使用します。

DECLARE @dt TIME
SET @dt = CONVERT(TIME,GETDATE())
PRINT @dt
2
Reza Paidar

「私のプロジェクトでは、日付が何であっても、DateTimeフィールドの午後5時のタイムスタンプを持つデータを返す必要があります。」

ですから、あなたが意味したのは、時刻ではなく日付が必要だったと思います。次のようにして、時間を5:00として日付を取得できます。

SELECT CONVERT(VARCHAR(10), GetDate(), 110) + ' 05:00:00'
2
Jim

これにより、日付部分が削除されます。

select convert(datetime,convert(float, getdate()) - convert(int,getdate())), getdate()

デフォルトの日付が1900-01-01の日時を返します。

2
RYUX123

select cast(getdate()as time(0))

例:-15:19:43

getdate()を、時間だけを抽出する日付時刻に置き換えます!

1
Glen Richmond
SELECT DISTINCT   
                 CONVERT(VARCHAR(17), A.SOURCE_DEPARTURE_TIME, 108)  
FROM  
      CONSOLIDATED_LIST AS A  
WHERE   
      CONVERT(VARCHAR(17), A.SOURCE_DEPARTURE_TIME, 108) BETWEEN '15:00:00' AND '15:45:00'
1
p.ajay

MS SQL 2012以降では、FORMAT(value,'format')を使用できることに注意してください。

例えばWHERE FORMAT(YourDatetime,'HH:mm') = '17:00'

1
AjV Jsy