如何使用SQL从列中检索一些信息

时间:2018-09-07 04:38:01

标签: sql-server tsql dynamic-sql

我有这张桌子

enter image description here

我想在另一个表中检索帐号,金额和日期

3 个答案:

答案 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或类似格式的数据源,然后提取数据。