Обновление значения, где дата - PullRequest
0 голосов
/ 26 января 2012

Я хочу обновить SOLUTION_ID, где CREATED_DATE больше или равно заданной дате.

Что у меня есть, так это обновление всех записей в таблице.CREATED_DATE имеет тип данных smalldatetime.

UPDATE [Database].[dbo].[TB__TABLE]
SET SOLUTION_ID = 1
WHERE CAST(CREATED_DATE AS datetime) >=  2011-05-08

С благодарностью за помощь!

Ответы [ 5 ]

2 голосов
/ 26 января 2012

Вы хотите указать дату;

WHERE CREATED_DATE >= '2011-05-08'

(без кавычек 2011-05-08 рассматривается как математическое выражение, которое соответствует 1998 году)

1 голос
/ 26 января 2012

Совсем нет необходимости в приведении.

И ваш запрос не будет работать точно так, как вы ожидаете в этом 2011 - 5 - 8 = 1998, который в SQL Server 22/6/1905 ...

>= '2011-05-08'
1 голос
/ 26 января 2012
UPDATE [Database].[dbo].[TB__TABLE]
SET SOLUTION_ID = 1
WHERE CAST(CREATED_DATE AS datetime) >=  '2011-05-08'
1 голос
/ 26 января 2012

Приведение колонки с маленьким временем не требуется. Пожалуйста, смотрите ниже образец

create table #temp
(
    dat smalldatetime,
    Solution_ID int
)

insert into #temp(dat, Solution_ID)values(1, GETDATE())
insert into #temp(dat, Solution_ID)values(2, GETDATE()+1)
insert into #temp(dat, Solution_ID)values(3, GETDATE()+2)

select * from #temp
where dat >= 'Your date'

Update #temp
Set Solution_ID = 4
Where dat >= 'Your date'
0 голосов
/ 26 января 2012

Используйте функцию DATEDIFF

DATEDIFF(dd, @GIVEN_DATE, CREATED_DATE) >= 0

Это вернет разницу в количестве дней от заданной вами даты и даты вашего создания.Когда функция возвращает ноль или больше, тогда значение create_date превышает заданную дату.Нет необходимости в кастинге.

    UPDATE [Database].[dbo].[TB__TABLE]        
    SET SOLUTION_ID = 1        
    WHERE DATEDIFF(dd, @GIVEN_DATE, CREATED_DATE) >= 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...