2012-10-21 60 views
0

標題可能有點混淆,但我可以在這裏說明。Mysql LIKE通配符有時存在值

我試圖使用MySQL的LIKE匹配,有時被包圍的值:或有時也可以是一方,有時沒有。我知道通配符%,但是會選擇所有內容,所以我找到了可以工作的_,但總是選擇那個單個字符,如果它是a,我只想選擇那個字符:否則不是。

還是糊塗?這是一個例子。

假設我在表'que'和'name'列中獲得了一個名爲'name'的列我得到了一個'sdfgsdfgsdfg:jimmy:asfds'的值我想選擇':jimmy:'if if相反,值是'sdfgsdfgsdfg:jimmy'我只想選擇':jimmy'。

又如。

要使用正則表達式acomplish這會是這樣的(?)如果吉米幫助(:?)。

請告訴我的目的呢?

我想從該值中刪除jimmy並將其替換爲: 我試圖將多個名稱存儲在一列中,並且需要刪除該一個人。

我有這樣的事情至今:

UPDATE `que` SET `name`= CASE WHEN `name` LIKE '%jimmy%' THEN replace(`name`, '%jimmy%', ':') ELSE `name` end WHERE 1 

回答

1

要使用正則表達式acomplish這會是這樣的(?)麥(:?)是否有幫助。

那麼使用REGEXP

我試圖將多個名稱存儲到一列中,並且需要刪除那個人。

不要那樣做。用你的RDBMS的關係的能力和normalise架構:

CREATE TABLE que_names (
    que_id BIGINT UNSIGNED NOT NULL, 
    name VARCHAR(255) NOT NULL, 
    FOREIGN KEY (que_id) REFERENCES que (que_id) 
); 

INSERT INTO que_names 
    (que_id, name) 
VALUES 
    (1, 'bob'), 
    (1, 'fred'), 
    (1, 'james'), 
    (2, 'michael'), 
    (2, 'jimmy'), 
    (2, 'fred') 
    -- etc. 
; 

ALTER TABLE que DROP COLUMN name; 

你會然後刪除所有jimmy有:

DELETE FROM que_names WHERE name = 'jimmy'; 

如果需要的話,然後你可以檢索您的現有表如下:

SELECT que.*, GROUP_CONCAT(que_names.name SEPARATOR ':') AS name 
FROM  que LEFT JOIN que_names USING (que_id) 
GROUP BY que_id 
+0

好的,謝謝。我只是將每個值設置爲自己的行。 –

+0

2分鐘,我會給你一個複選標記 –