2016-11-29 4 views
0

私はこのようなデータ型varchar(6)の2列を持っています。フォーマットはyyyymmです。今度はdatediffの間にしたいです。 これは私のソリューションです変換する方法とTsqlを使用してvarchar(6)でdatetime型yyyymmを計算する

select 
    tblA, 
    tblB, 
    datediff(month, convert(datetime, tblA+'01', 120),convert(datetime, tblb+'01',120)+1 as count 
from mytbl 

他のアイデアですか?ありがとう

+0

これを試すことができます。 –

答えて

2

YYYYMMDDという形式の文字列は、フォーマットが不要な日付値に直接変換できることが判明しました。だから、少し簡単なバージョンは次のとおりです。

select tblA, tblB, 
     datediff(month, convert(date, tblA + '01'), convert(datetime, tblb+'01')+1 as cnt 
from mytbl; 

私はあなたがも行うことができることに注意してください:

select ((left(tblA, 4) * 12 + right(tblA, 2)) - 
     (left(tblB, 4) * 12 + right(tblB, 2)) 
     ) 

SQL Serverは、数値コンテキストで数値に文字列を変換します。

また、私は日付の列がtblAtblBと呼ばれていることが奇妙なことを知っていますが、これは質問の表現方法です。

+0

申し訳ありません私の悪いおかげで4あなたの答えのため –

0

あなたは(おそらくSQL Server)を使用しているデータベースであなたの質問にタグを付けてください...だけでなく

select dt1,dt2, 
     datediff(month,concat(left(dt1, 4),'-',right(dt1, 2),'-01'),concat(left(dt2, 4),'-',right(dt2, 2),'-01')) dateDiff 
from mytbl 
+1

これは2列(月)@ThànhPhanの違いを与える –

+0

この答えを説明するいくつかのテキストは、それを改善するだろう – whytheq

関連する問題