2016-05-03 11 views
2

Ich habe eine SQL Server-Tabelle mit ein paar Spalten. Eine dieser Spalten ist eine date und eine andere ist No of Nights.Datum Subtraktion Fehler

Anzahl der Nächte ist immer eine zweistellige varchar Spalte mit Werten wie 1N, 2N, 3N usw. je nach der Anzahl der Nächte bis zu 7N.

Ich möchte den 1 Teil der 1N Spalte von dem Datum subtrahieren.

Für Ex: 25Oct15 - 1N = 24Oct15

Offensichtlich werde ich die '1 N' mit dem tatsächlichen Spaltennamen ersetzt werden. Ich habe versucht, einen Trimm wie tun:

date - left(no of nights, 1) 

Aber ich erhalte eine Fehlermeldung

Fehler bei der Konvertierung, wenn der varchar Wert ‚25Oct16‘ in dem Datentyp int konvertieren.

Beispiel Datum unter

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

Wo die Ergebnisspalte der subtrahierte Wert sein würde. Jede Hilfe wäre großartig. Vielen Dank.

+6

die 'N' ist in Ihrem Daten redundante unter Berücksichtigung der Feld NoofNights heißt sein sollte? Sag einfach –

+1

Und da ** Anzahl ** Nächte wie ein numerischer Wert klingt, sollte es ** als solches gespeichert werden ** - in einer 'INT'-Spalte .... –

+0

Leider ist dies eine Kundendatenbank, die ich ziehe Daten aus. Obwohl ich zu sql relativ neu bin, ich würde mit Ihnen zustimmen müssen, indem es sagte, dass es eine int Spalte sein sollte ... – Ang

Antwort

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

Ich habe diesen markiert, da er mir die einfachste Lösung gab ... Danke an alle – Ang

1

diese

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

Nun Grund Versuchen Abfrage wie

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

Sie müssen explizit in Integer umwandeln oder es wird sich darüber beklagen. 'Der Operand-Datentyp varchar ist ungültig für minus operator.' – Squirrel