【问题标题】:Want to display specific date records from stored procedure想要显示存储过程中的特定日期记录
【发布时间】:2013-11-26 09:54:24
【问题描述】:

嗨,朋友们,我必须使用存储过程显示数据库中的记录。

显示我使用的从一个日期到另一个日期的记录:

and Tbl_GDS_Request.RequestedDate between '''+ convert(varchar(20),@p_FromDate) + ''' 
and  ''' + convert(varchar(20), @p_ToDate) + ''''

但如果我只想显示fromdate 记录(即仅显示2013/11/07 日期的记录)或日期记录,即仅显示2013/11/07 日期的记录。

单日记录怎么显示?

请帮我解决它。

【问题讨论】:

  • 使用= 而不是between。但是Tbl_GDS_Request.RequestedDate的数据类型是什么,是date还是varchar
  • 这是一个日期时间数据类型
  • 您不应该将BETWEEN 与日期/时间/时间戳类型一起使用尤其是 on SQL Server。看起来您正在通过字符串连接创建查询,这使您可以使用 SQL 注入;您应该使用准备好的语句,它使您能够使用实际的日期/时间类型 - 您当前的方法在所有情况下都是安全的。为了使问题更清晰,您预期的传入参数是什么?

标签: c# sql sql-server vb.net


【解决方案1】:

为每个语句创建一个 OR 选择。 这将如下所示。 (代码未测试)

CREATE PROC Procname
(
 @date1 datetime IS NULL,
 @date2 datetime IS NULL
)
AS
select 
 *
from 
 atable a
where 
 --when both dates are filled in
 (@date1 is not NULL 
  AND @date2 is not NULL 
  AND a.date >= @date1 
  AND a.date <= @date2)
 OR
 --when only todate is filled in
 (@date1 is NULL 
  AND @date2 is not NULL 
  AND a.date <= @date2)
 OR
 -- when only fromdate is filled in
 (@date1 is not NULL 
  AND @date2 is NULL 
  AND a.date >= @date1)

【讨论】:

    猜你喜欢
    • 2014-10-09
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2014-09-16
    相关资源
    最近更新 更多