Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:将公式保存在表中_Sql_Sql Server_Dynamic_Calculated Columns - Fatal编程技术网

SQL Server:将公式保存在表中

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,

有没有办法在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, 
  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列,或者我可以在同一列中存储不同的公式?