2014-09-22 51 views
0

我在具有以下模式的行中有字符串。對於零個或多個字符的SQL Alchemy like/regex查詢

1) '"foo": [a, b, c]' 
2) '"foo": [aa, c]' 
3) '"foo": [aaaa]' 
4) '"foo": [b, c, a]' 
5) '"foo": [ba, ca, a1234aaa]' 

我需要找到具有字符a且只有字符a(不是aa或aaaa)的行數。 [答案是2行。行數量1和行貨號4]

邏輯:由零個或一個[空間前面]和結尾字符零個或一個[逗號]

我已經做:

likestr = '"foo": [%a%]' 
query = db.session.query(X).filter(X.Y.like('%'+likestr+'%'))  

顯然,這返回計數爲4,而正確的答案是2我的查詢將如何查看正則表達式?

+0

你的問題有點自我矛盾的。不包含'aa'? – 2014-09-22 13:15:30

+0

@StevenXu我的意思是符合要求的行數是2.而不是第二行。 – 2014-09-22 13:16:34

回答

1

這很簡單,沒有正則表達式。下面將工作(SQL Fiddle):

SELECT * 
FROM MyTable 
WHERE MyField like '%[a,%' 
    OR MyField like '%, a,%' 
    OR MyField like '%, a]%' 

或者,如果你想正則表達式(SQL Fiddle):

SELECT * 
FROM MyTable 
WHERE MyField REGEXP '\\[a, |, a,|, a\\]'; 
+0

這不會是通用的,因爲我相信我們可以有像a123這樣的情況。我們只需要一個在其之前有零個或一個空格以及在它之後有一個或一個逗號的單個a。 – 2014-09-22 13:20:09

+0

** @ Vamsi Krishna **,我修改了我的答案。這對你更好嗎? – Linger 2014-09-22 13:23:42

+0

我們可以有一個簡單的reg-exp解決這個問題,而不是ORs ..當你看到我正在嘗試Flask sql alchemy ,,理想情況下它必須儘可能通用。 – 2014-09-22 13:24:45