【问题标题】:Declare a variable in a 'read only' MySQL database在“只读”MySQL 数据库中声明一个变量
【发布时间】:2017-12-14 18:45:12
【问题描述】:

我想声明一个变量以在将日期信息输入“WHERE”子句时消除重复输入。但是,数据库是只读的,不允许我声明任何内容。这是我尝试过的:

SET @begin_date = '2017-12-01'
SET @end_date = '2017-12-30'
WHERE (ship.dateShipped BETWEEN @begin_date AND @end_date) 
OR (fulfill.datefulfilled BETWEEN @begin_date AND @end_date)

为了这篇文章,查询被简化了,但基本上是我想要做的。我必须将其交给销售人员以根据需要运行,并希望尽可能轻松地更改日期参数。

有没有办法在这种情况下声明变量?或者也许是另一种编写“WHERE”子句的方法,这样日期只需输入一次?

我也试过了:

SELECT @begin_date := '2017-12-01', @end_date := '2017-12-30'......

还有

DECLARE begin_date  INT unsigned DEFAULT '2017-12-01'
DECLARE end_date  INT unsigned DEFAULT '2017-12-30'

无济于事。

【问题讨论】:

  • 内联变量怎么样? (即BETWEEN '2017-12-01' AND '2017-12-30'
  • 是的,效果很好。但是,我想使用变量来执行此操作,因此在更改报告范围时只需调整 2 个日期(然后将更新以下变量实例)。尝试让使用它的销售人员尽可能轻松地更新日期范围。

标签: mysql


【解决方案1】:

您的查询几乎被简化到乱七八糟的程度,但这样的事情应该可以工作。

SELECT ...
FROM ....
INNER JOIN (SELECT '2017-12-01' AS beginDate, '2017-12-30' AS endDate) AS dr
ON (ship.dateShipped BETWEEN dr.beginDate AND dr.endDate) 
OR (fulfill.datefulfilled BETWEEN dr.beginDate AND dr.endDate)
...

真的不会让你使用@变量吗?

【讨论】:

  • 我正在编写查询以从 Fishbowl Inventory 数据库中提取报告,当我使用 @ 变量时,查询甚至不会运行。不过,这种加入确实起到了作用。
猜你喜欢
  • 2020-09-28
  • 2012-07-30
  • 2015-03-14
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
相关资源
最近更新 更多