Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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 如果日期字段早于当前时间,则插入新表_Sql_Sql Server_Sql Insert_Not Exists - Fatal编程技术网

Sql 如果日期字段早于当前时间,则插入新表

Sql 如果日期字段早于当前时间,则插入新表,sql,sql-server,sql-insert,not-exists,Sql,Sql Server,Sql Insert,Not Exists,我想为任何具有日期字段的记录进行表插入,该字段至少比当前日期时间早10分钟。由于某些原因,我的表不会创建新的insert。下面是示例代码: If Not Exists (Select * from dbo.Table where RecordName = @RecordName and DateAdd(Minute, 10, GETDATE()) >=1) Insert Into dbo.Table (RecordName, DateField, Field3, Field4) Value

我想为任何具有日期字段的记录进行表插入,该字段至少比当前日期时间早10分钟。由于某些原因,我的表不会创建新的insert。下面是示例代码:

If Not Exists (Select * from dbo.Table where RecordName = @RecordName and DateAdd(Minute, 10, GETDATE()) >=1)
Insert Into dbo.Table (RecordName, DateField, Field3, Field4)
Value (@RecordName, GETDATE(), '0','0');
仅供参考,我正在使用RecordName作为参数。请帮忙

您的问题是:


DateAddMinute,10,GETDATE>=1

您正在将日期时间与整数进行比较

现在我所在的时区是2017年11月1日上午8:27,DateAddMinute,10,GETDATE将为您提供“2017年11月1日上午8:37”>=1

1作为日期时间将计算为1900-01-02 00:00:00.000 选择CAST1作为日期时间

因此,您将测试何时不存在更新于1900-01-02 00:00:00.000的数据,我认为这在您的数据集中不太可能

如何纠正你的意图。您可能有一个日期/日期时间字段,如果您将其与

DATEADDminute,-10,GETDATE


当您只运行子查询时会发生什么情况?DateAddMinute,10,GETDATE>=1始终为真,我认为DateAddMinute,-10,GETDATE>=DateField做了更正后的工作-DateAddMinute,10,GETDATE>=1始终为假请标记您的dbms。SQL是一种语言。为了进行比较,datetime字段将转换为自1900-01-01以来的整数天数,因此总是>=1@GarethLyons-不,相反。datetime类型具有更高的值,因此它是转换为datetime的整数。@Garethlyns damien是正确的,由于优先级的原因,它实际上是向另一个方向转换为datetime,但在这两种情况下,OP都没有比较他/她认为他们的方式。另外1是1900-01-02 0实际上是1900-01-01谢谢@Matt!这完美地回答了我的问题!
If Not Exists (Select * from dbo.Table where RecordName = @RecordName and DateField >= DateAdd(Minute, -10, GETDATE()))
Insert Into dbo.Table (RecordName, DateField, Field3, Field4)
Value (@RecordName, GETDATE(), '0','0');