SQL ServerからYYYY-MM-DD
形式で日付を取得するにはどうすればよいですか?SQL Server 2000以降で使用するには、これが必要です。SQL Serverでこれを実行する簡単な方法はありますか、または結果セットを取得した後、プログラムで変換する方が簡単ですか?
Microsoft TechnetでCASTとCONVERTを読みましたが、必要な形式がリストに表示されず、日付形式を変更することはできません。
SQL ServerからYYYY-MM-DD
形式で日付を取得するにはどうすればよいですか?SQL Server 2000以降で使用するには、これが必要です。SQL Serverでこれを実行する簡単な方法はありますか、または結果セットを取得した後、プログラムで変換する方が簡単ですか?
Microsoft TechnetでCASTとCONVERTを読みましたが、必要な形式がリストに表示されず、日付形式を変更することはできません。
回答:
SELECT CONVERT(char(10), GetDate(),126)
不要な時間部分のvarcharチョップのサイズを制限します。
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
以降では、SQL Server 2012の(元の質問は2000です):
SELECT FORMAT(GetDate(), 'yyyy-MM-dd')
お探しのフォームは、書籍のオンラインドキュメントに記載されています。
http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx
たとえば、次のことを試してください。
select convert(varchar,getDate(),120)
select convert(varchar(10),getDate(),120)
convert
形式指定子120 の関数は、形式 "yyyy-MM-dd HH:mm:ss"を提供するため、日付部分のみを取得するには、長さを10に制限する必要があります。
convert(varchar(10), theDate, 120)
ただし、日付の書式設定は、通常、データベースまたはビジネスレイヤーではなく、プレゼンテーションレイヤーで行う方が適切です。データベースからフォーマットされた日付を返す場合、クライアントコードは、計算を行う必要がある場合、日付に再度解析する必要があります。
C#の例:
theDate.ToString("yyyy-MM-dd")
もう1つの方法...
CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime))
時間の部分も欲しいと思う人(私はそうしました)には、次のスニペットが役立つかもしれません
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
replace(convert(varchar, getdate(), 111), '/','-')
「何も切り刻む」ことなくトリックも行います。
誰かが別の方法でそれをしたいと思って、これを見つけた場合。
select convert(datetime, '12.09.2014', 104)
これにより、ドイツ語の日付形式の文字列がdatetimeオブジェクトに変換されます。
なぜ104なのか?こちらをご覧ください:http : //msdn.microsoft.com/en-us/library/ms187928.aspx
varchar
後でもう一度ではなく日付として使用する場合は、変換して戻すことを忘れないでください。
select convert(datetime,CONVERT(char(10), GetDate(),126))
上記の答えでなぜ最も簡単な方法が無視/省略されたのかわかりません:
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時間。
SELECT CONVERT(NVARCHAR(20), GETDATE(), 23)
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))
それぞれの変換/キャスト関数に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。
この解決策は私にとってうまくいき、シンプルで効果的です(126も有効です)
CONVERT(NVARCHAR(MAX), CAST(GETDATE() as date), 120)
ソースの日付形式がすべてごちゃごちゃしている場合は、次のように試してください。
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
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;