2017-09-20 16 views
0

yyyyMMddhh2017092018)文字列をSQL Server 2012のDateに変換する方法はありますか?SQL Serverのカスタム文字列を日付に変換する方法

T-SQLを使用せずに文章をINSERT句に入れることはできますか?

INSERT INTO [dbo].[Table](SomeColumn) 
VALUES (CONVERT(DATETIME, '2017092018', 'yyyyMMddhh')); 
+0

'T-SQLを使用せずに文章をINSERT句に入れることはできますか? ' - 私はここにあなたが何を求めているのかよくわかりません... – Siyual

+0

sqlで文字列パラメータで関数を作成して返します日付。さまざまなカスタム日付形式で機能を実行することもできます。 – OnurBulbul

+0

文字列は常に正確な形式ですか?常に同じ文字数ですか? – Siyual

答えて

3

Declare @S varchar(50)='2017092018' 

Select convert(datetime,left(@S,8)) + convert(datetime,right(@S,2)+':00') 

戻り

2017-09-20 18:00:00.000 

2012+の場合、私はあなたには、いくつかの予期しない値を持っているだけの場合)(try_convertをお勧めします。

+0

+1でなければなりません。私は矛盾した答えを投稿したくなかったが、私は別のアプローチを考え出した。 dateadd(時、変換(int、右(@s、2))、左(@s、8)) –

+0

@SeanLange投稿するそれはSOの美しさです...オプション –

+0

ありがとう、私は期待していたが、変換する文字列はありません日付=マスク( –

0

あなたはDATETIMEFROMPARTS使用することができます

DECLARE @d NVARCHAR(10)='2017092018'; 

SELECT DATETIMEFROMPARTS(LEFT(@d,4),SUBSTRING(@d,5,2),SUBSTRING(@d,7,2),RIGHT(@d,2),0,0,0) ; 

Rextester Demo

EDIT:

別のオプション:

DECLARE @S varchar(10)='2017092018' 
SELECT CAST(LEFT(@s, 8) AS DATETIME) + RIGHT(@s,2)/24.0; 

Rextester Demo2

1

ここにはもう1つのアプローチがあります。それはJohn Cappellettiが投稿したものと似ています。 STUFFを使用して

Declare @S varchar(50)='2017092018' 

Select dateadd(hour, convert(int, right(@s, 2)), left(@s, 8)) 
+1

0 +右(@ S、2)ではなく変換(int +1 –

+1

'選択CAST (左(@s、8)AS DATETIME)+右(@ s、2)/24.0; ' – lad2025

1

代替アプローチ:

DECLARE @val VARCHAR(25) = '2017092018'; 

SELECT CONVERT(DATETIME,STUFF(@val, 9, 0, ' ') + ':00') 

これは時間の前にスペースを追加し、その後、分値のため:00を追加します。

+1

すでに+1 ...受け入れられた回答でなければなりません。 –

+0

@JohnCappelletti多くの方法で猫を肌に触れることができます。 – Tanner

関連する問題