对于超长标题感到抱歉,但我无法描述这个问题。
基本上我有一个代码将一堆表链接在一起,我在整个代码中使用了相同的日期10次,以限制我正在研究的数据量。
我有时需要更改日期,所有10个将再次更改为同一日期。是否存在某种代码,在代码的顶部/底部我可以只更改一次,并将其他日期读出来或其他什么?或者只是单独更改每个日期的方法。
我想象某种方式代替日期“x”,然后在查询的顶部或底部说x = 2016-01-01
我试着搜索这个,但从未得到我想要的东西。我尝试了声明,但如果它的工作原理我一定不能正确使用它......
在一些评论中,我被问到了更多问题,老实说,我是相当新的,不确定'我'使用的是什么,我使用Teradata SQL Assistant作为我的程序,如果这对任何人都有意义吗?
此外,对于一些样本编码,这是我基本上尝试做的事情
选择 1 2 3 4
来自xtable
其中effective_date> '2016年1月1日'
我是以不同的方式做到这一点,但我会喜欢我能做的事情,所以'2016/01/01'等于抹去然后在某处我可以设置effdate ='2016'/ 01/01'并拥有表格现在阅读
选择 1 2 3 4
来自xtable
其中effective_date> effdate
希望这会增加一些清晰度吗?我试过做声明@或设置,似乎无法让语言正确...答案 0 :(得分:3)
大多数SQL方言都支持使用变量,无论是哪种方式。但是,我发现我有时会为此目的使用CTE:
with params as (
select cast('2016-01-01' as date) as thedate
)
select . . .
from params cross join
. . .
因为params
只有一行,所以我没有看到它会影响查询计划。有时,需要在子查询中重复:
with params as (
select cast('2016-01-01' as date) as thedate
)
select . . .
from params cross join
table1 . . .
(select . .
from params cross join
. . .
) s
on . . .
CTE(with
语句)是ANSI标准,几乎所有数据库都支持。
答案 1 :(得分:1)
使用MySQL,您可以使用内联视图。举个例子:
SELECT fum.fee
FROM (SELECT '2016-01-12' + INTERVAL 0 DAY AS mydate) i
JOIN fum
ON fum.fi < i.mydate
AND fum.fo > i.mydate
对于MySQL,您还可以使用用户定义的变量。用户定义变量的值在会话级别保持不变。
可以将值设置为单独的语句,查询可以多次引用:
SET @mydateval = '2016-01-13'
SELECT fum.fee
FROM fum
WHERE fum.fi < @mydateval
AND fum.fo > @mydateval
还可以在语句中为用户定义的变量赋值(例如,使用内联视图)。对变量的引用返回当前分配的值(在评估引用时)。 MySQL参考手册记录了有关该行为的警告。
如果在一个语句中设置变量的值,然后在另一个语句中引用它,只要没有其他东西可以修改用户定义变量的值,就可以了。用户定义的函数。