我有一个表notes
字段,数据类型为text
,在我们的应用程序中是一个特定于该订单的通用记事本。问题是,在旧订单上,这个字段很大且难以处理,因为有些部门输入的数据应该在他们自己的字段中。我们现在正试图尽可能地将这些数据分成实际字段。
notes
字段的示例部分:
...
05/12 Serve all $w/check. Ins here. Per recording-RSM (A-F)-1395 (G-O)-104786 (P-Z)-177015 *Unable to verify Billing/PT recs(07/12 LO)(08/12MH)
***EXPEDITORS : info I want here
(More junk data here)
...
有没有办法只选择单词EXPEDITORS
后面的字符串的其余部分,以帮助输入数据?没有一致的'end'字符或字符串,但将数据放在字段的开头就足够了。
到目前为止我所拥有的:
SELECT id, notes
FROM table
WHERE notes LIKE '%EXPEDITOR%'
注意:我知道text
数据类型是旧的;如有必要,转换为VARCHAR(MAX)
可用于此查询。
编辑:为了澄清,我的理想输出如下:
***EXPEDITORS : info I want here
但它也可以包含随后的所有内容。我主要想要删除关键字EXPEDITOR
前面的垃圾。
答案 0 :(得分:1)
想出来。
SELECT SUBSTRING(notes,
PATINDEX('%EXPEDITOR%', notes),
(DATALENGTH(notes) - PATINDEX('%EXPEDITOR%', notes)))
FROM table
这将返回以EXPEDITORS
关键字开头的文本。它仍然包含信息之后的其余垃圾,但无论如何它都会正常工作,因为它会被人类读取并输入。
密钥是SUBSTRING
函数和DATALENGTH
函数(后者是text
数据类型所必需的。)
感谢您的帮助。
答案 1 :(得分:0)
使用substr / instr。这些是Oracle查询,但它们可以在任何SQL中使用:
SELECT Substr(str, Instr(str, 'EXPEDITORS :')+Length('EXPEDITORS :')+1 ) str FROM
(
SELECT '05/12 Serve all $w/check. Ins here. Per recording-RSM....***EXPEDITORS : More Junk Data is what we want' AS str
FROM dual
)
/
如果你在EXPEDITORS之后总是有':',那么:
SELECT Trim(Substr(str, Instr(str, ':')+1 )) str FROM
(
SELECT '05/12 Serve all $w/check. Ins here. Per recording-RSM....***EXPEDITORS : More Junk Data is what we want' AS str
FROM dual
)
/
在这两种情况下,输出都是:
str
--------------------------------
More Junk Data is what we want
答案 2 :(得分:0)
您可以使用substring_index(或substr + instr)+ reverse
实际上,这是查询的演变:
SELECT REVERSE(SUBSTRING_INDEX(REVERSE(data), REVERSE('EXPEDITORS'), 1))
FROM yourtable
此查询返回:
: info I want here
(More junk data here)
...
然后:
SELECT SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(REVERSE(data), REVERSE('EXPEDITORS'), 1)), '\n', 1)
FROM yourtable
此查询返回:
: info I want here
结束:
SELECT REPLACE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(REVERSE(data), REVERSE('EXPEDITORS'), 1)), '\n', 1), ': ', '')
FROM yourtable
回归:
info I want here
编辑:在MySQL / Oracle中 SELECT REVERSE(SUBSTR( REVERSE(SUBSTR(数据,INSTR(数据,'EXPEDITORS:')+ LENGTH('EXPEDITORS:'))), LENGTH(SUBSTR(数据,INSTR(数据,'EXPEDITORS:')+ LENGTH('EXPEDITORS:'))) - INSTR(SUBSTR(数据,INSTR(数据,'EXPEDITORS:')+ LENGTH('EXPEDITORS:')) ,'\ n'))) 来自mytable