2016-01-04 26 views
0

我想在執行SELECT語句之前執行sqlite數據庫字段的「on the fly」修改。SQL:剪切一個字段,然後搜索

該字段被稱爲'topic_simple',它包含一些文本。在文中的某處,有一種我包含的分隔符:4個空格:" "

這裏是我的典型SELECT語句之一:

SELECT * FROM papers WHERE (topic_simple LIKE '% 3D print%')

,我想這樣的事情:

SELECT * FROM papers WHERE ((topic_simple_before_4_spaces) LIKE '% 3D print%')

我不想修改topic_simple在數據庫中,我只想在這個字段的子字符串上做一個select語句。

我該怎麼做?

+0

嚴重建議改善你的存儲結構。 ** [這篇文章](http://stackoverflow.com/questions/34553775/mysql-select-query-to-fetch-record-base-on-list-values/34553991#34553991)**雖然給出瞭解決方案(無論是在分隔符處理或修復它..你將不得不適應(可能使用替換)來將多個空格分隔符轉換爲那些在單個字符分隔符上工作的解決方案 – amdixon

回答

0

LIKE非常強大。你爲什麼不只是添加了四個空格您LIKE表達:

SELECT * 
FROM papers 
WHERE topic_simple LIKE '% 3D print% %'; 

要知道,你的分隔符之後的文本不應該包含分隔符,因爲這樣你會得到可能不需要的行。如果你的SQLite支持它,你也可以使用正則表達式。

MYSQL您可以直接在WHERE子句中的四個空格之前的「選擇」(或「提取物」)的文本:

SELECT * 
FROM papers 
WHERE SUBSTRING(topic_simple, 1, LOCATE(' ', topic_simple) - 1) ...; 
+0

sqlite中沒有子字符串函數。 。但是,如何定位? – Rififi

+0

@Rififi對不起,在MySQL世界。查看編輯。 – steffen

+0

不好意思,但是你建議的LIKE查詢不會返回我想要的結果。我用'''%3D print%'''' '''這會返回包含例如'3D打印機'或'3D打印'的條目,我只想在4個空格之前對零件進行類似的查詢 – Rififi

相關問題