2016-10-14 5 views
-1

Ich habe zwei Felder in einer Tabelle, ein Varchar-Feld, das Werte wie 3, 4, 11 oder NULL, die 3, 4 oder 11 Jahre übersetzt spart.sql Abfrage zu update Datetime Feld basierend auf currentdate + Wert

Kürzlich habe ich neue Spalte in der gleichen Tabelle vom Typ Datum eingeführt, wo ich Daten speichern und die das vorherige Feld schließlich ersetzen wird.

Dies sind die eigentlichen Säulen:

enter image description here

So für das neue LeaseRemainingFirstBreakDate Feld möchte ich GETDATE() + der Wert im LeaseRemainingFirstBreak Feld, wenn es nicht null tun.

Vielen Dank im Voraus, Laziale

+0

Haben Sie [DATEADD] (http://www.w3schools.com/sql/func_dateadd.asp) verwendet? – techspider

+0

So etwas wie DATEADD (yyyy, LeaseRemainingFirstBreak, GETDATE()) nehme ich an? – Laziale

+0

Ja, Sie müssen mit NULL für zweiten Parameter umgehen – techspider

Antwort

0

UPDATE [tablename] SET [LeaseRemainingFirstBreakDate] = dateadd(year, [LeaseRemainingFirstBreak], convert(date, getDate()) where [LeaseRemainingFirstBreakDate] is not null

Der Konvertit stellt sicher, dass das Format das Datumsformat paßt in den anderen Werten in diesem Feld angezeigt.

+0

warum brauchen Sie 'CONVERT' für' GETDATE() '? – techspider

+0

Sonst würde es die Stunden/Minuten/Sekunden zurückgeben - nur passend zur Namenskonvention der im Beispiel gezeigten Daten. – finjo

+0

Abrufen dieses Fehlers Der Argumentdatentyp nvarchar ist für das Argument 2 der Funktion dateadd ungültig. – Laziale

0

Mit der Mehrdeutigkeit in der Frage,

Wenn yo NULLs ignorieren und aktualisieren andere Zeilen, will

UPDATE YourTable 
SET LeaseRemainingFirstBreakDate = DATEADD(yyyy, CONVERT(INT, LeaseRemainingFirstBreak), GETDATE()) 
WHERE LeaseRemainingFirstBreak IS NOT NULL 

Wenn Sie

aktuelles Datum für die mit NULL-Werten, zu prüfen,
UPDATE YourTable 
SET LeaseRemainingFirstBreakDate = DATEADD(yyyy, CONVERT(INT, COALESCE(LeaseRemainingFirstBreak,0)), GETDATE()) 
0

Via Verwendung DATEADD Funktion.

Eample:

Create table Test (LeaseRemainingFirstBreakDate int ,LeaseRemainingFirstBreak datetime) 
Go 

Insert into Test (LeaseRemainingFirstBreakDate ,LeaseRemainingFirstBreak ) 
Values (2, null), 
     (12, null), 
     (22, null), 
     (Null, null), 
     (Null, null) 
GO 

Select * from Test 

Das Ergebnis:

enter image description here

Update Test 
Set LeaseRemainingFirstBreak = DATEADD(YEAR,LeaseRemainingFirstBreakDate,getDate()) 
where LeaseRemainingFirstBreakDate is Not NULL 

Die Ergebnis:

enter image description here

Hinweis: ausgeschlossen ich die Zeilen, die NULL haben, während

where LeaseRemainingFirstBreakDate is Not NULL 

über mit der Aktualisierung, wenn Sie wollen die anderen null Zeilen aktualisieren, Händels Null über

ISNULL oder COLLASE Funktionen.

Verwandte Themen