TSQL日時フィールドからYYYY-MM-DD形式の日付を取得する方法


259

SQL ServerからYYYY-MM-DD形式で日付を取得するにはどうすればよいですか?SQL Server 2000以降で使用するには、これが必要です。SQL Serverでこれを実行する簡単な方法はありますか、または結果セットを取得した後、プログラムで変換する方が簡単ですか?

Microsoft TechnetでCASTとCONVERTを読みましたが、必要な形式がリストに表示されず、日付形式を変更することはできません。


126のBOLの説明は少し混乱しています(「T」の説明は見つかりませんでした)。
nojetlag 2010

「T」は日付と時刻を分離します。 ウィキペディアのISO 8601をご覧ください
krubo

回答:


428
SELECT CONVERT(char(10), GetDate(),126)

不要な時間部分のvarcharチョップのサイズを制限します。


3
いいえ、ただし一部のクライアントでは固定長に問題があります。
gbn 2009年

54
この投稿は、YYYYMMDDに変換するためにGoogleに表示されます。つまり、CONVERT(char(10)、GetDate()、112)
NealWalters

1
これは私にとってはうまくいきませんでした。上記のコード112での提案はそうでした。ありがとう@NealWalters
AlexVPerl 14

4
出力スタイルの整数コードのリスト:msdn.microsoft.com/en-us/library/ms187928.aspx
Ben Fransen

コード126は、YYYY-mm-dd形式の誕生日などの日付に適しています:CONVERT(char(10)、pat_dob、126)as pat_dob
jjwdesign

118
SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM

SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy – 10/02/2008                  

SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02           

SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy

SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy

SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy

SELECT convert(varchar, getdate(), 106) -- dd mon yyyy

SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy

SELECT convert(varchar, getdate(), 108) -- hh:mm:ss

SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM)

SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy

SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd

SELECT convert(varchar, getdate(), 112) -- yyyymmdd

SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm

SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h)

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm

SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm

1
「mm / dd / yyyy」ではなく「m / d / yyyy」を取得する方法
user_az

これは、断然、最も役立つ答えです。
ダニエル

109

以降では、SQL Server 2012の(元の質問は2000です):

SELECT FORMAT(GetDate(), 'yyyy-MM-dd')


これは、Dotnet標準形式を使用して、最近のSQLバージョンで日付/時刻を実行するための健全で柔軟な方法です。分と区別するために、月MMを大文字にすることを忘れないでください。 すべての日時形式
ジムバーチ2018

FORMATの実行は(通常)CONVERTより43倍遅くなります。FORMATを使用しないこと(およびその単語を頻繁に使用しないこと)を強くお勧めします。
ジェフモダン

35

お探しのフォームは、書籍のオンラインドキュメントに記載されています。

http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx

たとえば、次のことを試してください。

select convert(varchar,getDate(),120)
select convert(varchar(10),getDate(),120)

4
この場合、デフォルトを使用すると、時刻の値が取得されます。形式120の形式全体は「yyyy-mm-dd hh:mi:ss」です。長さを明示的に宣言することにより、元のメモで指定した形式-'yyyy-mm-dd'にトリミングされます。
DaveE 2009年

26

convert形式指定子120 の関数は、形式 "yyyy-MM-dd HH:mm:ss"を提供するため、日付部分のみを取得するには、長さを10に制限する必要があります。

convert(varchar(10), theDate, 120)

ただし、日付の書式設定は、通常、データベースまたはビジネスレイヤーではなく、プレゼンテーションレイヤーで行う方が適切です。データベースからフォーマットされた日付を返す場合、クライアントコードは、計算を行う必要がある場合、日付に再度解析する必要があります。

C#の例:

theDate.ToString("yyyy-MM-dd")

1
なぜ反対票か。あなたが間違っていると思うことを何も説明しないと、答えを改善することはできません。
Guffa 2014年

14

YYYYMMDDを試す

select convert(varchar,getDate(),112)

SQLServer2008でのみテストしました。


7

もう1つの方法...

CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime)) 

1
これにより、2012年8月3日のように1桁の日付が作成されます。2桁のmm / ddが必要な場合は、日付を左詰めにする必要があります。RIGHT('00 '+ CONVERT(varchar、DATEPART(yyyy、@datetime))、2)例
MindStalker

7

時間の部分も欲しいと思う人(私はそうしました)には、次のスニペットが役立つかもしれません

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm
SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
                              --example -- 2008-10-02T10:52:47.513

6
replace(convert(varchar, getdate(), 111), '/','-')

「何も切り刻む」ことなくトリックも行います。


このバージョンは、convert(varchar(10)...)バージョンに関連する「年9999」のバグを回避するために好まれます。
Francis Huang


5

キャストおよび変換リンクで、スタイル126を使用します。

CONVERT (varchar(10), DTvalue, 126)

これは時間を短縮します。これをyyyy-mm-ddに含めるという要件は、文字列データ型と日時である必要があることを意味します。

正直なところ、正当な理由がない限り、クライアントでそれを行います。


4

varchar後でもう一度ではなく日付として使用する場合は、変換して戻すことを忘れないでください。

select convert(datetime,CONVERT(char(10), GetDate(),126))

これはシステムのデフォルトのフォーマットに変換し直しませんか?
IgnasVyšnia15年

3

上記の答えでなぜ最も簡単な方法が無視/省略されたのかわかりません:

SELECT FORMAT(GetDate(),'yyyy-MM-dd');--= 2020-01-02

SELECT FORMAT(GetDate(),'dd MMM yyyy HH:mm:ss');-- = 02 Jan 2020 08:08:08

私が2番目の言語を選択するのは、どちらの言語を話すにしても、その日付が何であるかがわかるからです。

また、SQL Serverは、コンピューターに設定されている地域の形式に関係なく、それを保存手順に送信するときに常に「理解」します-私は常に年(yyyy)、月名(MMM)、24時間形式(大文字のHH)を使用します私のプログラミングで1時間。



2

使用することもできます。これは、新しいデータ型を使用することによって行われDATEます。以前のすべてのバージョンでは機能しない可能性がありますが、新しいバージョンで使用するために大幅に簡略化されています。

SELECT CAST(getdate() AS DATE)
SELECT LEFT(CAST(getdate() AS DATE), 7)


1
SELECT Code,Description FROM TABLE

-- This will Include only date part of 14th March 2010. Any date with date companents will not be considered.
WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate <= DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126))

-- This will Include the whole day of 14th March 2010
--WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate < DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126))


1

スラッシュで日付を区切る場合は、奇妙なことをする必要はありません。バックスラッシュでエスケープしてください。そうしないと、ドットが表示されます。

SELECT FORMAT(GETDATE(),'yyyy\/MM');  

SQL Server 2016でテスト済み


パフォーマンスをテストする必要があります。FORMATは通常、複雑なCONVERTよりも43倍遅くなります。
ジェフモダン

0

それぞれの変換/キャスト関数にCASEステートメントを使用すると、常に機能します。

tableXXXXYをテーブル名に置き換え、issueDate_datをそのテーブルの日時フィールドの名前に置き換えてください。

SELECT  issueDate_dat, CONVERT(varchar, DATEPART(yyyy, issuedate_dat))  AS issueDateYYYY
, CASE WHEN (len(CONVERT(varchar, DATEPART(mm, issuedate_dat))) < 2) THEN '0' +CONVERT(varchar, DATEPART(mm, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(mm, issuedate_dat)) END AS  issueDateMM
, CASE WHEN (len(CONVERT(varchar, DATEPART(dd, issuedate_dat))) <2) THEN '0' +CONVERT(varchar, DATEPART(dd, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(dd, issuedate_dat)) END AS issueDateDD
FROM            tableXXXXY

これがお役に立てば幸いです。Chagbert。


0

この解決策は私にとってうまくいき、シンプルで効果的です(126も有効です)

CONVERT(NVARCHAR(MAX), CAST(GETDATE() as date), 120)

0

ソースの日付形式がすべてごちゃごちゃしている場合は、次のように試してください。

select
convert(nvarchar(50),year(a.messedupDate))+'-'+
(case when len(convert(nvarchar(50),month(a.messedupDate)))=1 
    then '0'+ convert(nvarchar(50),month(a.messedupDate))+'-' 
    else convert(nvarchar(50),month(a.messedupDate)) end)+
(case when len(convert(nvarchar(50),day(a.messedupDate)))=1 
    then '0'+ convert(nvarchar(50),day(a.messedupDate))+'-'
    else convert(nvarchar(50),day(a.messedupDate)) end) 
from messytable a

0
 IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);

cmdGetPaymentStatement.Parameters.AddWithValue("@pStartDate", DateTime.Parse("22/12/2017", culture, System.Globalization.DateTimeStyles.AssumeLocal)).IsNullable = true;

上記のコードは、mm / dd / yyyyの形式でパラメーターにストアプロシージャを提供するために使用されます
Raj Kumar '28
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.