2012-07-24 4 views
5

今日の午後4時30分を取得したいと思います。このようにハードコーディングするとうまくいきません。特定の時刻に今日の日付を使用してDateTimeを作成する

SELECT '07242012 16:30:00.000' 

これは私が思ったよりも難しいことが分かります。私はこれにどのようにアプローチするのですか?

+0

を将来的には、あなたが使用しているSQL Serverののバージョンmeantion場合、それは非常に参考にすることができます。 –

+0

ああ、それを反映するために質問を更新します。 –

+0

タグを使ってバージョンを示すように編集を変更しました。その質問に埋め込まれたバージョン情報を見つけようとするよりも簡単です。 –

答えて

15

のSQL Server 2005分の2000:

SELECT DATEADD(MINUTE, 30, DATEADD(HOUR, 16, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP))); 

-- or 

SELECT DATEADD(MINUTE, (16*60) + 30, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP)) 

-- or 

SELECT CONVERT(DATETIME, CONVERT(CHAR(9), CURRENT_TIMESTAMP, 112) + '16:30'); 

SQL Serverの2008+:

SELECT CONVERT(DATETIME, CONVERT(DATE, CURRENT_TIMESTAMP)) + '16:30'; 

SQL Server 2012の:

SELECT SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 16, 30); 
+0

SQL 7は何ですか? 6.5? :) –

+0

@ NathanSkert私は最初のコードブロックが7.0/6.5でも動作すると思いますが、私はそれを証明するためにインスタンスを一緒に投げていません。 :-) –

+0

非常に徹底的な答え、ありがとうアーロン! –

0

おそらく最も簡単な方法は、キャストすることです現在の日付/時刻を日付に変換(時間を取り除く)し、日付時刻にキャストしてdatetimeのオーバーロードを許可する+ (plus)を開き、最後に必要なテキスト時間をdatetimeにキャストします。次のように:

select cast(cast(sysutcdatetime() as date) as datetime) + cast('16:30' as datetime) 

リターン(2018年1月11日に実行した場合):

2018-01-11 16:30:00.000 
+0

これは本当に質問に答えません。別の質問がある場合は、[質問する](https://stackoverflow.com/questions/ask)をクリックして質問することができます。また、[賞品を追加](https://stackoverflow.com/help/privileges/set-bounties)でこの質問にもっと注意を向けることもできます。 - [レビューの投稿](レビュー/低品質の投稿/ 18476550) –

+0

これは妥当な答えと思われますが、ここで何が起こっているのか説明を追加するともっと良いでしょう。コードスニペットだけでは、そのアイデアを示すコードに続いて、何をしているのかを説明する段落ほど役に立ちません。 – Caleb

+0

私は返信を拡大しました。うまくいけば、それはもっと価値があるように見える –

関連する問題