【问题标题】:Add month and date to year as SQL parameter将月份和日期添加到年份作为 SQL 参数
【发布时间】:2017-09-03 09:00:25
【问题描述】:

我需要能够将月份和日期添加到参数的年份。

由于我们的财政年度从每年的 7 月 1 日开始,我需要这样做,以便用户可以输入财政年度 'YYYY' 作为参数,它将返回从前一年 7 月 1 日开始的财政年度的结果年份从当年的 7 月 1 日开始和结束。

例如。对于 2016 财年,我需要在 2015 年 7 月 1 日之后结束并在 2016 年 6 月 30 日之前开始的所有记录。目前用户必须记住指定 7 月 1 日和 6 月 30 日。我怎样才能做到这样他们就可以输入年?

目前有效,但需要完整日期作为参数

Where (E.end_date > @param1 Or E.end_date Is Null Or @param1 Is Null) And
  (E.start_date < @param2 Or e.start_date Is Null Or @param2 Is Null)

但这行不通

Where (A.end_date > @param1 Or A.end_date Is Null Or @param1 Is Null) And
    (A.start_date < DateAdd(day, 1, @param2) Or A.start_date Is Null Or
      @param2 Is Null)
      And
      (A.end_date > dateadd(yyyy,-1,'@param3-07-01') And
    A.start_date < '@param3-07-01' Or @param3 Is Null)

SQL,至少在他们给我的用于为我们的记录软件输入 SQL 的小部件中,不喜欢 '@param3-07-01' 将参数放在日期字符串中以评估日期的语法,但它会接受 @ 987654324@ 将允许我在 where 子句中将参数放在字符串中的其他情况,例如 Like '%@param1%'

【问题讨论】:

  • 您使用哪个 SQL 服务器?
  • ]来自供应商:Credible 不共享此信息,因为它是专有的,但是我与我们的 IT 部门核实,发现如果您编写的查询是标准 SQL,那么它将运行。如果您还有其他问题,请告诉我。”

标签: sql parameters optional-parameters


【解决方案1】:

我正在向后看。解决方法不是将年份参数转换为日期,而是将日期转换为年份。

year(dateAdd(mm,6,A.start_date))
year(dateAdd(mm,6,A.end_date))

我将它插入到我的代码中,效果很好。

Where (year(dateAdd(mm,6,A.end_date)) > @param1 Or A.end_date Is Null Or @param1 Is Null) And
    (year(dateAdd(mm,6,A.start_date)) < DateAdd(day, 1, @param2) Or A.start_date Is Null Or @param2 Is Null)

【讨论】:

    【解决方案2】:

    更简单的方法是将年份参数作为字符串并将日期连接为字符串文字。然后,我们可以使用数据类型转换函数来转换日期

    例如:

    SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      相关资源
      最近更新 更多