Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 基于日期比较删除行-sql_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 2008 基于日期比较删除行-sql

Sql server 2008 基于日期比较删除行-sql,sql-server-2008,tsql,Sql Server 2008,Tsql,我正在编写一个SQL脚本来从表中删除一些行 我需要删除具有特定类型easy的行,其中,当创建日期小于下午4点时,估价时间戳是当天的16:00。这有意义吗 delete from cfo_daily_trans_hist where dh_dd_type_id = 'valuation' --and dh_val_time_stamp is today at 16:00 where the dh_create_dt is today at a time earlier than 16:00 我真

我正在编写一个SQL脚本来从表中删除一些行

我需要删除具有特定类型easy的行,其中,当创建日期小于下午4点时,估价时间戳是当天的16:00。这有意义吗

delete from cfo_daily_trans_hist where dh_dd_type_id = 'valuation' --and dh_val_time_stamp is today at 16:00 where the dh_create_dt is today at a time earlier than 16:00
我真的不知道进行精确日期比较的语法


谢谢各位。

这不仅仅是16:00的排位,对吗?如果时间是16:30,我会不会也吵架?我们只想在WHERE子句中使用的值正好是16:00时删除它们,因此查询只会删除符合所有条件的行。dh_create_dt今天在16:00之前还有一个附加条件。这个书面的查询将允许dh_create_dt在今天之前的任何一天的16:00之前为任何值。好的观点@GMastros,您需要另一个谓词将[dh_create_dt]限制在今天的1600小时之前,就像您的回答中那样:和[dh_create_dt]>=DateAddDateDiffDay,0,GETDATE,0。这不仅会给我16:00行,对吗?如果时间是16:30,我会不会也吵架?我们只想在WHERE子句中使用的值正好是16:00时删除它们,因此查询只会删除符合所有条件的行。dh_create_dt今天在16:00之前还有一个附加条件。此书面查询将允许dh_create_dt在今天之前的任何一天的16:00之前为任何值。好的观点@GMastros,您需要另一个谓词将[dh_create_dt]限制在今天的1600小时之前,如您的答案所示:和[dh_create_dt]>=DateAddDateDiffDay,0,GETDATE,0。
DELETE [dbo].[cfo_daily_trans_hist]
WHERE [dh_dd_type_id] = 'valuation' 
AND [dh_val_time_stamp] = DATEADD(HH, 16, CONVERT(DATETIME,CONVERT(DATE,GETDATE()))) -- is today at 16:00 
AND [the dh_create_dt] < DATEADD(HH, 16, CONVERT(DATETIME,CONVERT(DATE,GETDATE())))-- is today at a time earlier than 16:00
And dh_val_time_stamp = DateAdd(Hour, 16, DateAdd(Day, DateDiff(Day, 0, GetDate()), 0))
And dh_create_dt >= DateAdd(Day, DateDiff(Day, 0, GetDate()), 0)
And dh_create_dt < DateAdd(Hour, 16, DateAdd(Day, DateDiff(Day, 0, GetDate()), 0))
-- =================
-- sample data
-- =================
declare @t table
(
    dh_val_time_stamp datetime,
    dh_create_dt datetime
)

declare @d datetime
set @d = cast(cast(cast(getdate() as float) as int) as datetime)

insert into @t values (dateadd(hh, 16, @d), dateadd(hh, 14, @d))
insert into @t values (dateadd(hh, 1, @d), dateadd(hh, 2, @d))


-- =================
-- solution
-- =================
select 
    *
from @t t1
cross apply
(
    select d = dateadd(hh, 16, cast(cast(cast(getdate() as float) as int) as datetime))
) t2
where dh_val_time_stamp = d
and dh_create_dt < d