如何使用 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 或类似的数据源,然后提取数据。
我有这个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 或类似的数据源,然后提取数据。