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

How to retrieve some information from a column using SQL

我有这个table

我想将账户号码、金额和日期检索到另一个 table

试试这个: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

您可能想在查询中使用正则表达式。 你可以参考这个 link 来获取正则表达式

此外,由于您有多个不同的帐号、金额和日期 你必须想出一套账号规则,比如

1) "Account Number"或"acc/no"或"acc"

之后的词

2) "INR","NPR"等后面的词

3) "on"之后的单词,包含“/”或"Jan,Feb,March,April,May,June"等

[text] 列看起来像是已经构造好的,看起来太不一致了,无法使用字符串处理或正则表达式来查找帐号(除非您可以根据您的情况对每个列编码 3 或 4 个变体数据,然后维护它们)。我宁愿建议去寻找 3NF 或类似的数据源,然后提取数据。