SQLでDateTimeフィールドの時間部分を抽出するにはどうすればよいですか? 私のプロジェクトでは、日付に関係なく、DateTime フィールドのタイムスタンプが午後 5 時のデータを返す必要があります。
13 に答える
これは時間のみを返します
SQL サーバーの場合:
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')
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)
日時の時間のみが必要な場合は、次を使用できます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
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
これは古い質問であることは知っていますが、他の人がすべて答えているので
- 文字列を返す (日時ではなく)
- 日付の内部表現に依存する (float、int、およびその逆への変換) または
- SQL Server 2008 以降が必要です。
日時操作のみを必要とし、SQL Server 2005 以降で動作する「純粋な」オプションを追加すると思いました。
SELECT DATEADD(dd, -DATEDIFF(dd, 0, mydatetime), mydatetime)
これは、日付ゼロ (1900-01-01) と指定された日付との差 (日数) を計算し、指定された日付からその日数を減算して、日付コンポーネントをゼロに設定します。
MS SQL 2012 以降から使用できることに注意してくださいFORMAT(value,'format')
例えばWHERE FORMAT(YourDatetime,'HH:mm') = '17:00'
「私のプロジェクトでは、日付に関係なく、DateTime フィールドのタイムスタンプが午後 5 時のデータを返す必要があります。」
つまり、あなたが言いたいのは、時間ではなく日付が必要だということだったと思います。次のようにして、時刻が 5:00 の日付を取得できます。
SELECT CONVERT(VARCHAR(10), GetDate(), 110) + ' 05:00:00'
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'