2017-05-26 2 views
1

私はテキストファイルの内容を格納しているPostgreSQLのテキストフィールドを持っています。分割文字のベースでpostgresのテキストフィールドの最後のn行を選択する

問合せ:

SELECT m_Field 
FROM m_table 
WHERE id = 1; 

私はクエリを実行応答は次のとおりです。

「基本的な手順は、ここに示されているとIPSと鼻息を使用することに大きく依存している\ N1。 snort IPSを利用して初期感染ベクターのダウンロードを防止する\ n2。 snort IPSを使用してトロイの木馬実行ファイルのダウンロードを防止する\ n3。 snort IPSを利用して現在の感染を警告する\ n4。感染したマシンからマルウェアを駆除して削除する\ n5。他のマルウェアのインスタンスを削除し、マシンから削除します。\ n6。さらに感染を防ぎ、ビジネスの成功を確実にしてください。

は今、私はいくつかのSQLクエリを使用して、これを行うことは可能です。この場合には\n

あるスプリット文字に基づいて、このフィールドからのみ、最後のn行を読みたい、または私が持っています列からデータを読み込み、それを分割するには?あなたはPythonでこれを実行したい場合は、事前に

おかげ

+0

するとあなただけのSQLまたはいずれかを使用しています他のフレームワーク? –

+0

私はdjangoを使用しています。 しかし、私はそれがほとんどデータベースの終わりで行われることを望む – Usama

答えて

1

、クエリの結果とを取得する取得し、\nでそれを分割し、あなたがしたい場合は、この

q = exec_query('SELECT m_Field FROM m_table WHERE id = 1;') # suppose you are executing with some function exec_query 
last_n_lines = q.split('\n')[-n] 

のような最後のn行を取得することができますデータベース側でこれを行うには、次のことができ、これはここでstring_to_arrayこの

q = exec_query(SELECT string_to_array(m_Field, '\n') FROM m_table WHERE id = 1;) 
last_n_lines = q[-n] 

のようにPostgresの関数です。

2

だけではPostgreSQLでのアプローチ:

select id, rn, sentence 
from (
    select 
     id 
     , reverse(sentence) sentence 
     , row_number() over(partition by id) rn 
    from m_table, unnest(string_to_array(reverse(m_field), 'n\')) sentence(token) 
    ) t 
where rn <= 3  --<< alter this number to suit 
order by rn DESC 

NB:文字列を逆にすると、最後のn行

を選択できるようにすることです
+----+----+---------------------------------------------------------------+ 
| id | rn |       sentence       | 
+----+----+---------------------------------------------------------------+ 
| 1 | 3 | 4. Kill and remove malware from the initally infected machine | 
| 1 | 2 | 5. Kill other instances of malware and remove from machines. | 
| 1 | 1 | 6. Prevent further infection and ensure business success.  | 
+----+----+---------------------------------------------------------------+ 

参照:http://rextester.com/GXMED5871

関連する問題