SQLで時間のない日付を選択する方法


257

SQLで日付を選択すると、として返され 2011-02-25 21:17:33.933ます。しかし、必要なのは日付部分、つまりです2011-02-25。これどうやってするの?


4
私は彼が文字列を望んでいると思うので、それは複製されません
bernd_k


@TylerH現在の時刻の代わりに2011-02-25 00:00:00.000を取得する方法はありますか?
スレイダー

回答:


148

私は彼が文字列を望んでいると思います。

select convert(varchar(10), '2011-02-25 21:17:33.933', 120)

ここで120は、私たちが入力日付を渡すことコンバート機能を告げ、次の形式yyyy-mm-dd hh:mi:ss


120は何ですか?
Павле

@Павлеこの記事を参照日付と時刻のスタイル
Fox V FoxnhTâmFeb

私はこのselect convert(varchar(10)、APPROVED_DATE、120)を使用しました、エラー列APPROVED_DATE datetimeを取得しました、それをどのように変換しますか?エラーマルチパート識別子「LAB_RESULTS.APPROVED_DATE」をバインドできませんでした。
アブドラ

530

SQL Server 2008の場合:

Convert(date, getdate())  

https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sqlを参照してください


6
「タイプ日付は定義されたシステムタイプではありません」と表示されます。
SeaDrive

10

33
なぜこれがそんなに賛成された答えなのか、私にはわかりません。この質問は、SQL Server 2005のために、されない 2008年2005年は持っていないdateデータ型は、したがって、無効としてこのソリューションをレンダリングします。
ジョシュアバーンズ

84
著者ではなく、人々が問題の解決策を探しに来るので、それは賛成です。だから110人がこれが彼らのために働いたことを見つけたら、私はそれが110の賛成票を持っているのは公正だと思います。
James

select convert(table.order_date、getdate());を使用すると、同じエラーが発生します。SQL Serverバージョン2017、エラー(型日付は定義されたシステム型ではありません)列型日付時刻
Abdullah

57

最速はdatediff、例えば

select dateadd(d, datediff(d,0, [datecolumn]), 0), other..
from tbl

ただし、値のみを使用する必要がある場合は、dateaddをスキップできます。たとえば、

select ...
WHERE somedate <= datediff(d, 0, getdate())

datediff(d, 0, getdate())は、時間部分なしで今日の日付を返すのに十分です。


Oldie but goodieは、このトリックを古い2000/2005 DBで何十回も使用しました。
KeithS




10

以下のための2008以前のバージョン

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)


これに拍手!その他のソリューションは、値を切り捨てるvarchar(10)部分のみに依存しています。
ゴンザオビエド

2

少し遅いですが、ODBCの「curdate」関数を使用します(角括弧 'fn'はODBC関数のエスケープシーケンスです)。

SELECT {fn curdate()} 

出力: 2013-02-01


4
私は正直に、あなたの答えが受け入れられた答えよりも優れているとあなたがどう思うかについて興味があります。それとも他の答えを参照しているのでしょうか?
ミカエルエリクソン2013

1
@Mikael Eriksson:うーん、ODBC関数は標準関数であり、したがって非決定論的なSQLサーバー関数とは異なり、インデックス付けが可能なためです。しかし、気にしないでください。テストの3つのエントリから本番の1 * 10E6エントリに移動する場合、これはスケーリングの問題にすぎません。開発中に問題は発生しません;)
Stefan Steiger

8
このクエリSELECT {fn curdate()} FROM (SELECT 1) AS T(X)を実行して実際の実行プラン(xmlバージョン)を確認すると、実際に実行されているものがであることがわかりますCONVERT(varchar(10),getdate(),23)。したがって、このODBC関数のデータ型はvarchar(10)、結果をと比較する場合、文字列datetimeからvarchar(10)への暗黙的な変換を取得することを意味しdatetimeますyyyy-mm-dd。その暗黙の変換はで失敗しset dateformat dmyます。
ミカエルエリクソン

1
@ミカエル・エリクソン:バグのように見えますが、代わりにSELECT CONVERT(char(8)、GETDATE()、112)を使用する必要があります。
Stefan Steiger 2014年

「非決定的なSQL-Server関数とは異なり、正規関数、したがってインデックス可能」-えーと、何ですか?
マーティン・スミス


2

必要に応じて同じデータ時間を維持するために、日付に変換した後、日付時間に変換します

select Convert(datetime, Convert(date, getdate())  )


1

使い方は簡単です:

convert(date, Btch_Time)

以下の例:

テーブル:

Efft_d       Loan_I  Loan_Purp_Type_C   Orig_LTV    Curr_LTV    Schd_LTV    Un_drwn_Bal_a      Btch_Time            Strm_I  Btch_Ins_I
2014-05-31  200312500   HL03             NULL         1.0000    1.0000         1.0000      2014-06-17 11:10:57.330  1005    24851e0a-53983699-14b4-69109


Select * from helios.dbo.CBA_SRD_Loan where Loan_I in ('200312500') and convert(date, Btch_Time) = '2014-06-17'

1

手遅れですが、フォローはうまくいきました

declare @vCurrentDate date=getutcdate()

select @vCurrentDate

データ型が日付の場合、時間は切り捨てられます


0

PLSQLで使用できます

to_char(SYSDATE,'dd/mm/yyyy')

これをコメントに転送することを検討してください。
xlembouras 2014年

この質問はSQL Serverに関するものです... Oracleではありません
Ben

0

最初に日付を浮動小数点数(数値を表示する)にROUND変換し、次に数値を0の小数点に変換してから、それを日時に変換します。

convert(datetime,round(convert(float,orderdate,101),0) ,101)

0

日付タイプを単に日付として返したい場合

CONVERT(date, SYSDATETIME())

または

SELECT CONVERT(date,SYSDATETIME()) 

または

DECLARE @DateOnly Datetime
SET @DateOnly=CONVERT(date,SYSDATETIME())

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.