2017-08-03 39 views
-1

我有一个历史表列,其中包含发生在请求中的事件的action。列数据看起来像这样。结果集中的TSQL匹配字符串

Updated Status | Open - New > Open - Assigned 

我试图想出一个查询在那里我能找到的所有请求,其中一个状态为Open - Assigned

SELECT * FROM TABLE WHERE status = '%' + action + '%'; 

由于动作既包含以前的状态(对胡萝卜的左)和新状态(对胡萝卜的右边)我得到错误的匹配。

有没有一种方法可以说我搜索>后,这将允许意味着找到所有已被转移到当前状态的请求?

+2

我觉得有点费解的问题。您能否通过分享一些样本数据和您试图获得的结果来澄清? – Mureinik

+1

看来你在这里面临的最大问题是正常化。如果您的数据已正确归一化,则不会有任何问题发现符合条件的行。 –

+0

@SeanLange这只是一个优秀转储,我扔进了一张桌子,所以我可以更好地操纵它。讨厌VBA宏:) – SBB

回答

1
SELECT * FROM TABLE WHERE REVERSE(SUBSTRING(REVERSE(status),0,CHARINDEX('>',REVERSE(status)))) like '%' + action + '%' 
1
SELECT * FROM TABLE WHERE status LIKE '%' + @action 

将查找以@action参数结尾的操作。

您也可以寻求“>”然后拿串右侧然后搜索,但它太复杂

+0

正确,但如果我正在寻找'开放 - 新'的状态,它会给我以前处于该状态的所有项目以及现在处于该状态的任何项目。我想我试图把这个'行动'看作是两个单独的价值。胡萝卜左边是'previousStatus',胡萝卜右边是'NewStatus'。我试图找到'NewStatus ='打开 - 新''的所有数据' – SBB

+0

@SBB注意到我删除了最后一个'%'。它有帮助吗? –