我有以下列方式存储的一系列数据:
Word of various kinds (ANT\username1) and even more words
This is another row, the words are random (ANT\username2)
Thankfully the username only ever shows once (ANT\username1)
上面代表三个单独的行。
此数据的一般流程为:
正如您可能已经猜到我需要做的是从每一行获取用户名并且它不存在的位置返回null。不幸的是我不知道如何处理这个问题 - 我已经玩过left()和right()函数,但是我们真的不知道如何解决这个问题。如果任何使用许多函数完成任务的答案都有一个快速的模糊解释逻辑流程(那么我可以阅读文档中的函数来学习),我将不胜感激。
答案 0 :(得分:1)
请注意数据不符合预期时的具体结果。这适用于格式'(ANT\....)'
。
-- sample table
create table t(s varchar(max));
insert t select
'Word of various kinds (ANT\) blank' union all select
'Word of various kinds (ANT) blank' union all select
'Word of various kinds (ANT\ no closing' union all select
'Word of various kinds (ANT\(ANT\me) double up' union all select
'' union all select
'(ANT\' union all select
null union all select
'Word of various kinds (ANT\username1) and even more words' union all select
'This is another row, the words are random (ANT\username2)' union all select
'Thankfully the username only ever shows once (ANT\username1)';
-- Query
select Original = s,
Extracted = nullif(STUFF(LEFT(s, CharIndex(')',s+')',
PatIndex('%(ANT\%', s)) -1), 1,
PatIndex('%(ANT\%', s + '(ANT\')+4,''),'')
from t;