T-SQLで日時を文字列に変換する方法


89

この質問をここで見つけることができなかったことに驚いています。

日付時刻変数があり、それを文字列に変換して、別の文字列に追加できるようにしたいと考えています。簡単に日時に変換できる形式にしたい。

これどうやってするの?

(日付部分と時間部分が必要です。)


@TonyHopkinson私もたくさんのヒットを得たが、それらはすべて逆方向に変換しているようだった。またはもっと複雑なものが欲しい。
cja

3
と入力しConvert、ダブルクリックして強調表示し、Shift + F1を押します。常に防御の最前線です。
エリックJ.価格

回答:


154

次のクエリは、現在の日時を取得して文字列に変換します。次の形式で
yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar(25), getdate(), 120) 

47
適切な形式を取得するために任意の数値を渡す必要があるという事実はまだ乗り越えられません
cja

4
@cja驚きを共有します。yyddssのような文字列を指定して、希望する正確な形式を取得します。これにはおそらく技術的または歴史的な理由があります。しかし、それでも-非常に驚くべき。
Konrad Viltersten、2015

2
迅速な修正に感謝しますが、答えでは月を分としてコーディングしています。yyyy-MM-ddhh:mm:ss NOT yyyy-mm-dd hh:mm:ss
Tom Martin

これは古いですが、このスレッドに出くわしました。を使用するときは、結果の長さを希望DateTimeOffSetどおりに調整してvarcharください。私にとっては、タイムゾーンが欲しくなかったので、使用しなければなりませんでしたSELECT convert(varchar(19), sysdatetimeoffset(), 120)
RoLYroLLs 2017年


7

convertMicrosoft SQL Serverのステートメントを使用して、日付を文字列に変換できます。使用される構文の例は次のとおりです。

SELECT convert(varchar(20), getdate(), 120)

上記は、現在の日付と時刻YYYY-MM-DD HH:MM:SSを24時間形式の文字列で返します。

ステートメントの最後の数を、返される文字列の形式を変更する多くのいずれかに変更できます。これらのコードのリストは、MSDNのCASTおよびCONVERTリファレンスセクションにあります。


6

私の要件と使用しているバージョンに応じて、3つの異なる方法があります。

ここにメソッドがあります。

1)Convertの使用

DECLARE @DateTime DATETIME = GETDATE();
--Using Convert
SELECT
    CONVERT(NVARCHAR, @DateTime,120) AS 'myDateTime'
    ,CONVERT(NVARCHAR(10), @DateTime, 120) AS 'myDate'
    ,RIGHT(CONVERT(NVARCHAR, @DateTime, 120),8) AS 'myTime'

2)Castの使用(SQL Server 2008以降)

SELECT
    CAST(@DateTime AS DATETIME2) AS 'myDateTime'
    ,CAST(@DateTime AS DATETIME2(3)) AS 'myDateTimeWithPrecision'
    ,CAST(@DateTime AS DATE) AS 'myDate'
    ,CAST(@DateTime AS TIME) AS 'myTime'
    ,CAST(@DateTime AS TIME(3)) AS 'myTimeWithPrecision'

3)固定長文字データ型の使用

DECLARE @myDateTime NVARCHAR(20) = CONVERT(NVARCHAR, @DateTime, 120);
DECLARE @myDate NVARCHAR(10) = CONVERT(NVARCHAR, @DateTime, 120);

SELECT
    @myDateTime AS 'myDateTime'
    ,@myDate AS 'myDate'

4

前の回答のCASTand CONVERT関数に加えて、SQL Server 2012以降を使用している場合は、FORMAT関数を使用して、DATETIMEベースの型を文字列に変換します。

元に戻すには、反対のPARSEまたはTRYPARSE関数を使用します。

書式設定スタイルは.NETに基づいており(ToString()メソッドの文字列書式設定オプションと同様)、カルチャを認識するという利点があります。例えば。

DECLARE @DateTime DATETIME2 = SYSDATETIME();
DECLARE @StringResult1 NVARCHAR(100) = FORMAT(@DateTime, 'g') --without culture
DECLARE @StringResult2 NVARCHAR(100) = FORMAT(@DateTime, 'g', 'en-gb') 
SELECT @DateTime
SELECT @StringResult1, @StringResult2
SELECT PARSE(@StringResult1 AS DATETIME2)
SELECT PARSE(@StringResult2 AS DATETIME2 USING 'en-gb')

結果:

2015-06-17 06:20:09.1320951
6/17/2015 6:20 AM
17/06/2015 06:20
2015-06-17 06:20:00.0000000
2015-06-17 06:20:00.0000000

何か不足していますか、それともFORMAT(<date var>、 'dd MMMM yyyy HH:mm:ss')または必要なカスタム日付形式でOPの問題が解決されていますか?
グリム

@Grimあなたもそれができます。ドキュメントからThe format argument must contain a valid .NET Framework format string, either as a standard format string (for example, "C" or "D"), or as a pattern of custom characters for dates and numeric values (for example, "MMMM DD, yyyy (dddd)")
g2server

あなたは実際にここで働きすぎていると思います。SQL Serverには、DATETIME2に相当する暗黙の文字列があります。ここで実際に行っているのは、暗黙的な変換を利用して、日時ではなく結果の文字列をフォーマットすることです。
ジェイミーマーシャル

@JamieMarshall多かれ少なかれ。MSDNの提案:Use the FORMAT function for locale-aware formatting of date/time and number values as strings. For general data type conversions, use CAST or CONVERT.
g2server



1

これは多くの人から回答されていますが、最も簡単な解決策は省かれているように感じます。

SQL SERVER(私はその2012+を信じています)は、ここに示すように、DATETIME2に相当する暗黙の文字列を持っています

「datetime2でサポートされている文字列リテラル形式」のセクションをご覧ください。

OPの質問に明示的に回答するには:

DECLARE @myVar NCHAR(32)
DECLARE @myDt DATETIME2
SELECT @myVar = @GETDATE()
SELECT @myDt = @myVar
PRINT(@myVar)
PRINT(@myDt)

出力:

Jan 23 2019 12:24PM             
2019-01-23 12:24:00.0000000

注:最初の変数(myVar)は実際には値'2019-01-23 12:24:00.0000000'も保持しています。それはちょうどにフォーマットされJan 23 2019 12:24PM、使用時にに呼び出されるSQL Server用の書式セットをデフォルトに起因しますPRINT。ここでつまずかないでください、(myVer)=の実際の文字列'2019-01-23 12:24:00.0000000'


0

以下をお試しください:

DECLARE @myDateTime DATETIME
SET @myDateTime = '2013-02-02'

-- Convert to string now
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)

1
良い !!左も書く必要がありますか?
Gaurav123 2013

最初の10文字が必要なので、日付だけが必要な場合は必要です。
ram4nd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.