更新日期的值

时间:2012-01-26 16:03:55

标签: sql-server sql-server-2005 tsql sql-server-2008

我希望更新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 个答案:

答案 0 :(得分:2)

您想引用日期;

WHERE CREATED_DATE >= '2011-05-08'

(不带引号的2011-05-08被视为计算结果为1998的数学表达式

答案 1 :(得分: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'

答案 2 :(得分:1)

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

答案 3 :(得分:1)

根本不需要演员。

并且您的查询将无法完全按照您预期的那样运行2011 - 5 - 8 = 1998,其中sql server是22/6/1905 ...

>= '2011-05-08'

答案 4 :(得分: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