我有这张桌子
我想在另一个表中检索帐号,金额和日期
答案 0 :(得分:1)
尝试一下:http://sqlfiddle.com/#!18/2e0d2/11
WITH test(str) as (
SELECT 'Your account 18715240300738 has been credited by NPR 20,784.00 on Apr 4 2016 1:30PM REF: BH691241S6807782849 Thank you'
)
SELECT text, SUBSTRING(str, pos1, pos2 - pos1),
SUBSTRING(text, pos3, pos4 - pos3),
SUBSTRING(text, pos5, pos6-pos5)
FROM sms_text
CROSS APPLY (SELECT
CHARINDEX('NPR ', text) + 4 AS pos1,
CHARINDEX(' on ', text) AS pos2,
CHARINDEX(' account ', text)+8 AS pos3,
CHARINDEX(' has ', text) AS pos4,
CHARINDEX(' on ', text)+3 AS pos5,
CHARINDEX(' REF: ', text) AS pos6
) AS CA
答案 1 :(得分:0)
您可能想在查询中使用正则表达式。 您可以参考此link来获取正则表达式
此外,由于您的帐号,金额和日期有多种变体 您将不得不为帐户编号制定一套规则,例如
1)“帐号”或“ acc / no”或“ acc”之后的单词
2)“ INR”,“ NPR”等之后的单词
3)在“ on”之后的单词,包含“ /”或“ Jan,Feb,March,April,May,June”等
答案 2 :(得分:0)
[text]
列看起来好像已经构造好了,看起来太不一致了,无法使用字符串处理或正则表达式来查找帐号(除非您可以根据自己的数据为每个变量编码3或4个变体,然后维护它们)。我宁愿建议先查找3NF或类似格式的数据源,然后提取数据。