表定价
我想要的是提供start_date
&一个end_date
,以便在这两个日期之间获得每天的price_per_day
。
例如,如果我设置为start_date = 2015-05-30
& end_date = 2015-06-02
,所需的输出是
2015-05-30 | 24.00
2015-05-31 | 24.00
2015-06-01 | 27.00
2015-06-02 | 27.00
更新
即使这个输出对我来说还可以
24.00
24.00
27.00
27.00
答案 0 :(得分:1)
您必须选择的日期大于“从”日期开始,小于“收件人”日期。我没有测试就发布了以下内容,请测试并在出现任何错误时通知我。
var fooString = foo ? "foo is true" : "foo is false";
$"test {fooString}";
编辑: 请确保start_date和end_date的类型与提供的日期相同。为了安全起见,您还可以将它们转换为datetime或convert(varchar,yourDatevariable,103),但您必须在条件的两边应用它。
答案 1 :(得分:0)
您的请求应如下所示:
SELECT Price FROM Pricing WHERE start_date = 2015-05-30 AND end_date = 2015-06-02
但要打印出这两者之间的日期,我不知道。
这可能有助于您思考:
答案 2 :(得分:0)
您需要做的是有一系列日期(即每个日期1行)。这可以通过几种方式完成。可能最有效的是拥有一个日历表,但如果你不能添加不可能的新表。
您可以拥有一个数字表并将其添加到每行的开始日期,但这又需要一个新表。
因此,选项是使用一组联合查询来生成一系列数字。例如,以下将返回10行,数字为0到9: -
SELECT 0 a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
您可以相互交叉加入这些子查询以生成更大范围的数字,并将其添加到结果小于等于结束日期的开始日期: -
SELECT id, start_date, end_date, price_per_day, DATE_ADD(start_date, INTERVAL (units.a + tens.a * 10 + hundreds.a * 100) DAY) AS aDay
FROM pricing
CROSS JOIN (SELECT 0 a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
CROSS JOIN (SELECT 0 a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
CROSS JOIN (SELECT 0 a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) hundreds
WHERE DATE_ADD(start_date, INTERVAL (units.a + tens.a * 10 + hundreds.a * 100) DAY) <= end_date
以上将在日期之间处理最多1000天。容易扩展以应对10000天或更长时间,但会变慢。
在检查您感兴趣的日期范围时,您可以将其用作子查询: -
SELECT aDay, price_per_day
FROM
(
SELECT id, start_date, end_date, price_per_day, DATE_ADD(start_date, INTERVAL (units.a + tens.a * 10 + hundreds.a * 100) DAY) AS aDay
FROM pricing
CROSS JOIN (SELECT 0 a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
CROSS JOIN (SELECT 0 a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
CROSS JOIN (SELECT 0 a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) hundreds
WHERE DATE_ADD(start_date, INTERVAL (units.a + tens.a * 10 + hundreds.a * 100) DAY) <= end_date
) sub0
WHERE aDay BETWEEN '2015-05-30' AND '2015-06-02'
ORDER BY aDay