SQL Server:高级计算列公式

SQL Server:高级计算列公式,sql,sql-server,calculated-columns,Sql,Sql Server,Calculated Columns,SQL表有一个NVARCHAR(MAX)类型的列,其中包含客户状态的历史记录 StatusHistory列中的值示例: 20120401P,20140715A,20160118T 意思是: 2012年4月1日,客户待定 2015年7月15日客户开始活跃 2016年1月18日客户被终止 状态将始终按时间升序排列 在同一个表中,我有一个名为CustStatus的列,我想通过基于GETDATE()读取上面的StatusHistory列来存储当前的客户状态 目前,我正在使用CustStatus中使

SQL表有一个
NVARCHAR(MAX)
类型的列,其中包含客户状态的历史记录

StatusHistory
列中的值示例:

20120401P,20140715A,20160118T
意思是:

  • 2012年4月1日,客户待定
  • 2015年7月15日客户开始活跃
  • 2016年1月18日客户被终止
状态将始终按时间升序排列

在同一个表中,我有一个名为
CustStatus
的列,我想通过基于
GETDATE()
读取上面的
StatusHistory
列来存储当前的客户状态

目前,我正在使用
CustStatus
中使用用户定义函数的公式执行此操作

我可能错了,但我认为如果我不使用用户定义的函数就可以做到这一点,那么我可以提高包含这些信息的查询的性能


那么,是否有一个公式可以让我根据
GETDATE()
,通过读取
StatusHistory
来填充
CustStatus

设计非常糟糕。但是,根据您的规范并假设您没有未来状态,您可以非常简单地获得最新状态:

select right(StatusHistory, 1) as CurrentStatus
我非常同意marc_的观点,即您应该修复设计并使用
CustomerStatusHistory
表来正确存储这些内容。但是,如果您无法修复数据结构,至少这可以帮助您获得所需的信息


注意:使用
right()!不要再浪费时间来处理这个问题了-你需要修复你的设计!。您应该有一个具有当前状态的
Customer
表,以及一个单独的
CustomerHistory
表,该表引用
Customer
表并包含日期和状态列。有了这样一个恰当的关系设置,查询将变得轻而易举!!为什么我总是得到这样的答案,如果我的问题是“设计好吗?”。这不是我要的!所以我想没人知道怎么做。@FrankM.,因为回答你的实际问题会鼓励你继续使用它:)谢谢你迄今为止的回答。首先,字符串可能接收未来状态。另外,我有一个单独的状态表,我试图找到一个替代方法,以避免每次需要检索给定日期的状态时都读取该表。如果我打印一份日期已过的报告,我希望该报告反映该日期的状态,如果我今天或以后打印同一份报告,也希望该报告反映该日期的状态。当然,必须有更好的方法来做到这一点,同时提高查询的性能。欢迎任何建议。