0

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データ入力を支援するために、単語の後の文字列の残りの部分のみを選択する方法はありますか?一貫した「終了」文字または文字列はありませんが、フィールドの先頭にデータがあれば十分です。

私がこれまでに持っているもの:

SELECT id, notes 
FROM table 
WHERE notes LIKE '%EXPEDITOR%'

注:textデータ型が古いことはわかっています。VARCHAR(MAX)必要に応じて、このクエリの目的でに変換できます。

編集:明確にするために、私の理想的な出力は次のようになります。

***EXPEDITORS : info I want here

ただし、それに続くすべてのものを含めることもできます。私は主にキーワードの前のがらくたを削除しようとしていEXPEDITORます。

4

3 に答える 3

1

理解した。

SELECT SUBSTRING(notes,
                 PATINDEX('%EXPEDITOR%', notes), 
                (DATALENGTH(notes) - PATINDEX('%EXPEDITOR%', notes))) 
FROM table

EXPEDITORSこれにより、キーワードで始まるテキストが返されます。情報の後に残りのジャンクが含まれていますが、人間が読み取って入力するため、これはとにかく正常に機能します。

キーはSUBSTRING関数とDATALENGTH関数でした(後者はtextデータ型に必要です)。

ご協力ありがとうございました。

于 2013-01-18T23:52:03.643 に答える
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
于 2013-01-18T19:35:49.483 に答える
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

Wichが返します:

info I want here

編集:MySQL /Oracleの場合SELECTREVERSE(SUBSTR(REVERSE(SUBSTR(data、INSTR(data、'EXPEDITORS:')+ LENGTH('EXPEDITORS:')))、LENGTH(SUBSTR(data、INSTR(data、'EXPEDITORS: ')+ LENGTH(' EXPEDITORS:')))-INSTR(SUBSTR(data、INSTR(data、' EXPEDITORS:')+ LENGTH(' EXPEDITORS:'))、' \ n')))FROM mytable

于 2013-01-18T20:02:25.223 に答える