2012-01-26 191 views
0

我在找更新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 

非常感谢!

回答

2

你想引用日期;

WHERE CREATED_DATE >= '2011-05-08' 

(无引号2011-05-08被视为一个数学表达式,其值1998)

1

与SMALLDATETIME铸造柱的是不需要的。请参阅样本

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' 
1
UPDATE [Database].[dbo].[TB__TABLE] 
SET SOLUTION_ID = 1 
WHERE CAST(CREATED_DATE AS datetime) >= '2011-05-08' 
1

无需投在所有的下面。

正如你在2011期待您的查询也不会精确地工作 - 5 - 8 = 1998年其在SQL Server是22/6/1905 ...

>= '2011-05-08' 
0

使用DateDiff函数

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

这将返回与给定日期和创建日期相差的天数。当函数返回零或更大时,则created_date大于给定日期。无需铸造。

UPDATE [Database].[dbo].[TB__TABLE]   
    SET SOLUTION_ID = 1   
    WHERE DATEDIFF(dd, @GIVEN_DATE, CREATED_DATE) >= 0