Sybase(ASE)DATETIME字段在where子句中用于完全匹配

时间:2016-07-22 16:04:24

标签: sql sybase sybase-ase

我正在尝试将日期时间值传递给存储的proc查询,在该查询中,它会根据也是日期时间字段的列进行检查。

让我们举一个例子,我有一张表:

ProductID int
ProductName varchar(20)
InsertDate DateTime

现在,我写了一个存储过程:

Create proc usp_GetProductsByInsertDate
@input_insertDate datetime
as
select * from Products where InsertDate = @input_insertDate

现在,如果我通过@input_insertDate = '07/01/2016 06:25:15 PM',它应该会给我带来当时正好插入的产品列表,但这不会发生。我可能必须像下面那样返回结果:

select * from Products where InsertDate >= @input_insertDate

我想在claue字段中使用“日期和时间”。我可以用吗?这可能是一个愚蠢的问题,但我想知道为什么它不起作用。请让我知道如何。

2 个答案:

答案 0 :(得分:0)

您是否可以检查目标列InsertDate中的值是否包含预期匹配行的毫秒数(> 0)。默认设置中的某些数据库IDE会隐藏毫秒(您的@input_insertDate没有毫秒数),这可能会导致这种混淆。您的查询对我来说很好,您可以对预期的行进行datepart(ms, InsertDate)检查。

答案 1 :(得分:0)

我认为问题在于将查询或参数中的日期作为字符串传递,同时执行存储过程。看起来它并不像精确的日期时间匹配的字符串值。当日期对象在过程内部传递时,它匹配并返回结果,即,如果我们在表中查询具有" datetime"的字段,则将其分配给变量并将该变量传递给下一个查询完全匹配,然后它的工作原理。难道不奇怪吗?