55

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

4

13 に答える 13

68

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

SQL サーバーの場合:

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

説明:

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

MySQL の場合:

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

SQLFiddle Demo

于 2012-09-10T15:23:50.110 に答える
37

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)
于 2012-09-10T15:26:23.410 に答える
29

日時の時間のみが必要な場合は、次を使用できます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
于 2012-09-10T15:24:37.857 に答える
8

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

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

ランダムな datetime 値を取得して、時刻コンポーネントが午後 5 時になるように調整する場合、SQL Server 2008 にはいくつかの方法があります。まず、開始日が必要です (例: 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)
    

上記は、現在の日の開始日を示しています。

  • ただし、SQL Server 2008 では、次のように言えます。

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

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

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

select five_pm = dateadd(hour,17, t.some_datetime_column
                   - convert(time,t.some_datetime_column)
                   )
from some_table t
于 2012-09-10T17:56:59.263 に答える
8

これは古い質問であることは知っていますが、他の人がすべて答えているので

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

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

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

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

于 2015-11-11T09:12:37.953 に答える
5

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

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

于 2019-06-18T10:53:40.137 に答える
2

「私のプロジェクトでは、日付に関係なく、DateTime フィールドのタイムスタンプが午後 5 時のデータを返す必要があります。」

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

SELECT CONVERT(VARCHAR(10), GetDate(), 110) + ' 05:00:00'
于 2012-09-10T16:08:52.330 に答える
1
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'
于 2018-02-25T07:33:27.973 に答える