2016-05-03 20 views
2

は、私はいくつかの列を持つSQL Serverのテーブルを持っています。日付減算エラー

これらの列の一つがdateであり、他はNo of Nightsです。

夜間の回数は、最大7Nまでの数に応じて、1N、2N、3Nなどの値を持つ2文字のvarchar列です。

私は日から1N列の1部を減算します。 EXのために

:もちろん、私は、実際の列名を持つ '1N' を交換する25Oct15 - 1N = 24Oct15

。私はとトリムをやってみました:

date - left(no of nights, 1) 

しかし、私はデータ型intにvarchar型の値が「25Oct16」を変換するとき

変換が失敗したエラーを取得します。結果列を差し引いた値になり

Date      | NoofNIghts | Result 
2016-04-26 00:00:00.000 |  1N  | 
2016-04-28 00:00:00.000 |  3N  | 

以下

サンプル日付。どんな助けも素晴らしいだろう。ありがとう。

+6

ようにする必要があります試してみてくださいではありません、フィールドを考慮し、データの冗長化で 'N' はNoofNights呼ばれているのですか?ただ、 –

+1

コトと夜の**数**は数値のように聞こえるので、**などとして格納されなければならない - 'INT'列に.... –

+0

残念ながら、これは私が引っ張っていたクライアントのデータベースですデータは私は比較的SQLに新しいですが、私はそれがint列であったはずだと言ってあなたに同意する必要があります... – Ang

答えて

2
SELECT DATEADD (DAY, - CONVERT(INT, REPLACE(NoofNights, 'N', '')), getdate()) as Result 
+0

これは私に最も簡単な解決策を与えたので、これをマークしました...ありがとう – Ang

1

この

DECLARE @V_Date DATETIME = '2016-04-26 00:00:00.000' 
     ,@V_NoofNIghts VARCHAR(2) = '1N' 

SELECT DATEADD(DAY, CAST(LEFT(@V_NoofNIghts,1) AS INT) *-1 ,@V_Date) 
1

まあ、基本的なクエリが

Update tablename 
set result= DATEADD(d, -CAST(LEFT(NoofNIghts, LEN(NoofNIghts)-1) AS INT),Date) 
+0

あなたは明示的に整数に変換する必要がありますか、それについて文句を言います。 'オペランドのデータ型varcharはマイナス演算子では無効です。 ' – Squirrel