SQL Server:将公式保存在表中
有没有办法在SQL表中保存如下公式SQL Server:将公式保存在表中,sql,sql-server,dynamic,calculated-columns,Sql,Sql Server,Dynamic,Calculated Columns,有没有办法在SQL表中保存如下公式 -- first Monday in @month of current year dateadd(d, datediff(d, 0, dateadd(m, @month-1, dateadd(yy, datediff(yy, 0, getdate()), 6)))/7*7, 0), -- last Monday in @month of current year dateadd(d, datediff(d, 0, dateadd(m, @month,
-- first Monday in @month of current year
dateadd(d, datediff(d, 0, dateadd(m, @month-1,
dateadd(yy, datediff(yy, 0, getdate()), 6)))/7*7, 0),
-- last Monday in @month of current year
dateadd(d, datediff(d, 0, dateadd(m, @month,
dateadd(yy, datediff(yy, 0, getdate()), 6)))/7*7, -7),
-- third Friday in @month of current year
dateadd(d, datediff(d, 0, dateadd(m, @month-1,
dateadd(yy, datediff(yy, 0, getdate()), 3)))/7*7, 18)
我有一个包含多个国家的表格,需要为每个国家保存可变日期,如下面的示例所示。
这些日期是简单的日期计算,例如,总是在5月的第一个星期一等。
因此,我正试图找到最好的方法来处理这样的事情,日期值每年都在变化——大约30个国家中的每个国家需要5到10个日期
我对SQL非常陌生,所以这篇文章更多的是要找到处理类似问题的选项
非常感谢你在这方面的帮助和建议,迈克 这篇评论有点长。风景绝对是你能做的一件事。然而,我认为计算列是一种更好的方法(文档是这样的) 在SQL Server中,可以将计算方向放入表定义中。一种方法是在
createtable
语句中。另一种是使用altertable
:
alter table add FirstMondayOfCurrentYear as
dateadd(d, datediff(d, 0, dateadd(m, @month-1, dateadd(yy, datediff(yy, 0, getdate()), 6)))/7*7, 0);
您需要弄清楚@month
指的是什么。该定义不能使用变量——但您肯定可以在不使用变量的情况下获得今年的第一个星期一
您可以添加任意数量的内容(好吧,可能有一些限制,但我认为您不会达到)
计算列的一个非常强大的特性是,您可以在其上构建索引,并且这些索引会随着数据的变化而维护。非常方便
请注意,它们是在使用时计算的,因此这可能会带来一些额外的开销。这通常是一个很小的代价。看看吧。它允许您获取动态SQL字符串——包括参数!——并执行它们。与预编译的SQL语句相比,它有点慢,但如果你不追求速度,它肯定会给你想要的灵活性。你是否试图将公式存储为文本,然后稍后执行它们?不太确定你在寻找什么,但你可能想创建一个
视图,这就是我所希望的。我刚刚更新了我的帖子,因为这是为了更好地了解有哪些选项可以处理类似的事情。理想情况下,我希望避免在我的页面上的存储过程或PHP中列出30个case语句,因此我尝试以这种方式对其进行排序。我认为存储过程中的30个case语句比将这些函数保存在数据库中作为strings@M.Ali:谢谢。这类似于PHP中的Switch语句?这是否存在于SQL中?如果我的列表增加到50个或更多,是否会有任何(性能)问题?非常感谢,戈登-这非常有用!为了理解这一点,假设我需要30个不同的日期,以这种方式计算,这是否意味着我需要添加30列,或者我可以在同一列中存储不同的公式?