【问题标题】:How to to pass a date to a stored procedure?如何将日期传递给存储过程?
【发布时间】:2018-09-05 07:30:08
【问题描述】:

我有以下SP:

IF  EXISTS (SELECT * FROM [dbo].[Assignments] 
                WHERE ProjectId=@ProjectUID AND TaskId=@TaskUID AND ResourceId=@ResourceUID
                AND (StartDate <= @DATE AND FinishDate >= @DATE)
            )
BEGIN
        Return  1

END
ELSE
BEGIN
        Return 2
END

当我使用一些参数执行它时,它返回我 2(我已将此参数作为我的日期 @Date = '2018-11-02')所以我决定尝试在 select 语句中,并且 select 语句返回我一行,如果我把我的与 cmets 中的开始和结束日期一致,我的 SP 有效 所以我知道我的麻烦来自日期 但我不明白为什么

PS:我已经尝试过了,但结果是一样的

【问题讨论】:

  • 您使用的是哪个 dbms? (该代码是特定于产品的。)
  • 您能否提供一些表格中的示例数据?并期待结果谢谢
  • 需要将 startdate 和 enddate 转换为日期。如果@date 参数是字符串,那么也需要转换成日期

标签: sql-server tsql between


【解决方案1】:

使用datetime 列的日期部分比较日期:

IF EXISTS (
    SELECT * 
    FROM [dbo].[Assignments] 
    WHERE 
        ProjectId = @ProjectUID AND 
        TaskId = @TaskUID AND 
        ResourceId = @ResourceUID AND 
        (CONVERT(date, StartDate) <= @DATE AND CONVERT(date, FinishDate) >= @DATE)
)
BEGIN
    Return  1
END
ELSE 
BEGIN
    Return 2
END

【讨论】:

  • 奇怪的是我在中间做了一个演员,但没有用,我用比较符号添加了它,现在它可以工作了谢谢
猜你喜欢
  • 1970-01-01
  • 2021-11-15
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
相关资源
最近更新 更多