当前位置: 首页 > 面试题库 >

如何创建从另一列计算得出的列?

蒲功
2023-03-14
问题内容

我需要age在SQL Server数据库中创建一列。

该列的值应基于该列的值进行计算DOB

同样,它的值应该随着Age增加而增加。


问题答案:

您应该使用计算列来解决此问题。具有类似以下内容的定义:

ALTER TABLE Customers ADD Age AS datediff(year, DOB ,getdate())

原始声明摘自BlackWasp并提供了更多信息。

编辑:

MSDN将计算列解释为:

从可以使用同一表中其他列的表达式中计算出计算列。该表达式可以是非计算的列名,常量,函数,以及由一个或多个运算符连接的这些表达式的任意组合。该表达式不能是子查询。

除非另有说明,否则计算列是未物理存储在表中的虚拟列。每次在查询中引用它们时,都会重新计算它们的值。数据库引擎在CREATE TABLE和ALTER
TABLE语句中使用PERSISTED关键字将计算的列物理存储在表中。当其计算中的任何列发生更改时,它们的值都会更新。通过将计算列标记为PERSISTED,可以在确定的但不精确的计算列上创建索引。此外,如果计算列引用了CLR函数,则数据库引擎将无法验证该函数是否确实具有确定性。在这种情况下,计算列必须为PERSISTED,以便可以在其上创建索引。有关更多信息,请参见在计算列上创建索引。

可以在选择列表,WHERE子句,ORDER BY子句或可以在其中使用正则表达式的任何其他位置中使用计算列,但以下情况除外:

必须将用作CHECK,FOREIGN KEY或NOT
NULL约束的计算列标记为PERSISTED。如果计算列的值由确定性表达式定义并且索引列中允许结果的数据类型,则计算列可以用作索引中的键列或任何PRIMARY
KEY或UNIQUE约束的一部分。

例如,如果表具有整数列a和b,则可以为计算列a + b编制索引,但是无法为计算列a +
DATEPART(dd,GETDATE())建立索引,因为该值在后续调用中可能会更改>。

计算列不能是INSERT或UPDATE语句的目标。

数据库引擎会根据使用的表达式自动确定计算列的可为空性。即使仅存在不可为空的列,大多数表达式的结果也被视为可为空,因为可能的下溢或上溢也会产生空结果。将COLUMNPROPERTY函数与AllowsNull属性一起使用,以调查表中任何计算列的可空性。通过指定ISNULL(check_expression,常量),可以将可为空的表达式转换为不可为空的表达式,其中,该常量是可替换任何空结果的非空值。

来源:MSDN-计算列



 类似资料:
  • 问题内容: 我在Sqlite中有一个查询,其中涉及复杂的列计算,可以这样说: 我想将此计算选择为,但我还需要将其用作另一种计算的组成部分: 不幸的是,这会产生错误: 我知道我可以简单地重复计算: 但是,假设操作复杂且昂贵,是否有什么方法可以在以后重新引用它而不必重新计算呢? 问题答案: 您需要使用子查询。 结果

  • 问题内容: 我有一个表,其中包含商店中每件商品的单价和其他详细信息。 另一个包含每个订单中包含的项目的详细信息。 现在我要计算 请注意,我希望它成为表本身的一部分,而不是作为其他视图或查询。我怎样才能做到这一点?我为此研究了触发器和其他机制,但是它们是否适用于不同表中的值,尤其是在存在此类约束的情况下? 我尝试过根据另一列计算出的Column进行以下触发吗?: 但这似乎没有用 问题答案: 这是如何

  • 问题内容: 我有看起来像的数据框: 为了进一步处理数据,我需要拆分该列,然后将其替换为如下所示的多列: 因此,这些列可以追加到初始数据帧。我不知道该怎么做,因为像 不能解决我的问题,因为我不仅需要基于列表中位置的列,还需要基于列表中每个唯一值的列。您知道我该如何处理吗? 问题答案: 您可以使用和: 如果需要计数值,则可以使用(我添加一个字符串进行测试):

  • 我有一个火花RDD(或Dataframe-转换成任何一个都不是问题),具有以下列(每个结构的示例): 我想扩展这个RDD/DF,以增加一个包含列表数组大小的列。所以输出应该是这样的(示例): 我试图做一个

  • 问题内容: 我真的需要一个具有简单总和的表上的计算列。 请看下面: 我试图通过添加以下内容来创建计算列 我收到错误消息: 在这种情况下,不允许消息1046,级别15,状态1,第4行子查询。仅允许标量表达式。 请告知我该怎么办。 非常感谢 第2部分 我已经创建了一个函数;但是,我得到空值,请指教。 只需选择返回要添加到Phone_list表中的值的语句 表定义 问题答案: 你可以用你的查询到这样的(

  • 我正在尝试用python创建热图。为此,我必须为可能值范围内的每个值指定一个RGB值。我想把颜色从蓝色(最小值)改为绿色(最大值)。 下面的图片示例解释了我对颜色组成的看法:我们有一个范围,从1(纯蓝色)到3(纯红色),2介于两者之间,类似于绿色。 我阅读了关于线性插值的内容,并编写了一个函数(或多或少)来处理在最小值和最大值之间的某个值的计算,并返回一个RGB元组。它使用和conditions(