sql-запрос для обновления поля datetime на основе currentdate значение

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

У меня есть два поля в таблице, одно поле varchar, в котором сохраняются такие значения, как 3, 4, 11 или NULL, что переводится в 3, 4 или 11 лет.

Недавно я ввел новый столбец в той же таблице типа date, где я сохраняю даты и который в конечном итоге заменит предыдущее поле.

Это фактические столбцы:

введите описание изображения здесь

Итак, для нового поля LeaseRemainingFirstBreakDate я хочу сделать GETDATE() значение в поле LeaseRemainingFirstBreak, если оно не равно null.

Комментарии:

1. Вы использовали DATEADD ?

2. Что-то вроде этого DATEADD(гггг,LeaseRemainingFirstBreak,GETDATE()) Я полагаю?

3. Да, вам нужно обработать NULL для второго параметра

4. Можете ли вы привести мне пример, пожалуйста, как обрабатывать NULL, а также спасибо

5. попробуйте это SELECT DATEADD(yyyy, COALESCE(LeaseRemainingFirstBreak,0), GETDATE())

Ответ №1:

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

Преобразование гарантирует, что формат соответствует формату даты, указанному в других значениях в этом поле.

Комментарии:

1. зачем вам это нужно CONVERT GETDATE() ?

2. В противном случае он вернет часы / минуты / секунды — просто в соответствии с соглашением об именовании существующих дат, показанных в примере.

3. Получение этого аргумента ошибки типа данных nvarchar недопустимо для аргумента 2 функции dateadd.

4. Поле LeaseRemainingFirstBreak должно быть целым числом.

Ответ №2:

С двусмысленностью в вопросе,

Если вы хотите игнорировать нули и обновлять другие строки,

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

Если вы хотите учитывать текущую дату для тех, у кого значения NULL,

 UPDATE YourTable 
SET LeaseRemainingFirstBreakDate = DATEADD(yyyy, CONVERT(INT, COALESCE(LeaseRemainingFirstBreak,0)), GETDATE())
  

Ответ №3:

С помощью DATEADD функции Using.

Пример:

 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
  

Результат:

введите описание изображения здесь

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

Результат:

введите описание изображения здесь

Примечание: я исключил строки, которые имеют значение NULL при обновлении с помощью

   where LeaseRemainingFirstBreakDate is Not NULL
  

ЕСЛИ вы хотите обновить другие нулевые строки, измените значение Null с помощью

ISNULL или COLLASE функции.