空白日期参数而不是使用“允许空”复选框

Posted

技术标签:

【中文标题】空白日期参数而不是使用“允许空”复选框【英文标题】:Blank Date Parameter Rather than using 'Allow Null' Checkbox 【发布时间】:2015-11-02 21:10:43 【问题描述】:

我会尽量清楚我在这里需要什么。基本上,我有“FromDate”和“ToDate”参数。默认情况下,我希望这些参数包括所有日期/时间。我可以通过检查“允许 Nulls”并在主存储过程中处理 NULL 来实现这一点。不幸的是,业务用户不会理解 Null 复选框的含义。此外,我可以将默认日期设置为 SQL Server 支持的最早和最晚日期,但这很难看。因此,我需要解决这个问题。 我需要一些方法让这些参数默认为空白值,这样当我运行报告时,无论日期如何,我都会立即取回记录。然后,如果用户想要调整日期,他们应该能够单击日历图标并选择从和到日期(参数必须保持日期时间)。 有什么想法吗?

【问题讨论】:

日期时间不能是“空白值”。空字符串将被隐式转换为 1900-01-01。当参数是可选的时,为什么使用默认值是一个丑陋的解决方案? 【参考方案1】:

编辑:刚刚看到您正在使用 s-s-rS - 您能否将包含 from_date 的文本框设为表达式:

=iif(Parameters!from_date="1753-01-01","",Parameters!from_date)

对于 UI 或报告,您可以将 SQL 最小日期值屏蔽为空字符串或“选择日期...”字符串吗?

if from_date_in_sql = '1753-01-01' then
    from_date_on_report = ""
end if

由于这只会影响报告/UI 显示日期的方式,因此您不必在 SQL 表中允许 NULL 日期。保存时,你必须做相反的事情。如果 from_date_on_report = "" 然后设置 from_date_to_save_to_SQL_table = '1753-01-01'

【讨论】:

不幸的是,没有办法屏蔽参数标签,因为我仍然需要日历弹出窗口才能工作:/【参考方案2】:

我会通过更改存储过程来使报告中的参数成为可选参数。

如果用户不选择日期,请确保将 null 或没有值传递给参数(默认设置为 null),如果他们选择了日期,则应将日期值传递给过程和您的过程应该看起来像.....

CREATE PROCEDURE my_report_Sp
  @StartDate DATE = NULL
 ,@EndDate   DATE = NULL
AS
BEGIN
   SET NOCOUNT ON;
   Declare @Sql NVARCHAR(MAX);

SET @Sql = N' SELECT * FROM TableName WHERE 1 = 1 '
        + CASE WHEN @StartDate IS NOT NULL
          THEN N' AND DateColumn >= @StartDate' ELSE N'' END
        + CASE WHEN @EndDate IS NOT NULL
          THEN N' AND DateColumn <= @EndDate' ELSE N'' END        

Exec sp_executesql @Sql 
                  ,N'@StartDate DATE,@EndDateDATE '
                  ,@StartDate
                  ,@EndDate

END

【讨论】:

以上是关于空白日期参数而不是使用“允许空”复选框的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在复选框和文本之间出现空白?

使用复选框而不是单选按钮来控制传单图层?

jquery脚本检查文本框是不是为空,或者复选框是不是被选中

检查复选框是不是被选中而不单击它

Android 使用按钮和对话框复选框的多选项目,并在列表视图中显示所选项目而不是按钮

帆软报表常用功能