iT邦幫忙

0

MYSQL語法

我想請問,現在有很多筆html語法資料存在資料庫裡,該如何撈出想要的資料
例如我想撈出 </p><h3>的欄位,該怎麼抓資料
我用過like %</p><h3>%和LOCATE('</p><h3>',description),都無法撈出資料,該如何撈出資料

還有,如果在資料表裡有一個正確的格式,要拿這個格式當範例,該怎麼挑出其他不正確的格式?

謝謝

看更多先前的討論...收起先前的討論...
fun13832 iT邦新手 5 級 ‧ 2011-08-04 09:33:54 檢舉
有問題可以在問你嗎?
wiseguy iT邦超人 1 級 ‧ 2011-08-04 09:45:59 檢舉
請發問吧
fun13832 iT邦新手 5 級 ‧ 2011-08-04 10:00:09 檢舉
UPDATE products_description 
SET products_description = 
replace(products_description,
products_description (RegExp '</p>[[:space:]]*<h3>'),'</p><p></p><h3>');


這樣會錯誤!有別的方法嗎?

UPDATE products_description 
SET products_description = 
replace(products_description,'%</p><h3>%','</p><p></p><h3>');


因為下這樣的查詢,沒有辦法更新到任何資料

謝謝你!需要再開一個發問的版嗎?
fun13832 iT邦新手 5 級 ‧ 2011-08-04 10:20:49 檢舉
select .... where description RegExp '</p>[[:space:]]*<h3>'

[[:space:]]

這是正規式吧?
是甚麼意思,我找了SQL語法辭典找不到解說?

Orz抱歉是新手!
wiseguy iT邦超人 1 級 ‧ 2011-08-04 17:20:07 檢舉
1. RegExp 只有<搜尋>功能,所以如果你要 replace,是不能用的。更何況你連 where 都沒寫,當然會有 SQL 語法錯誤。

2. like 語法同樣只有<搜尋>功能,replace 也不支援。

先確定你用 locate 能不能查得到
select * from products_description where locate('</p><h3>', products_description);
如果可以,那就可以下:
UPDATE products_description
SET products_description =
replace(products_description,'</p><h3>','</p><p></p><h3>');
就好了。
如果用 locate 查不到,用 RegExp 才查得到
select * from products_description where products_description RegExp '</p>[[:space:]]*<h3>';
那麼沒有第二條路,你得把 record 讀出來,用程式做 replace 之後再寫回去。
wiseguy iT邦超人 1 級 ‧ 2011-08-04 17:26:08 檢舉
是正規表示法沒錯啊!RegExp 就是 Regular Expression 的縮寫不是嗎?

我附的參考資料 URL 官方文件不是已經寫得超詳細了?
[[:space:]] 代表的是空白字元,一般空白、Tab、換行都算在內。
發問者是否可以把幾筆資料貼上來,也許好一點.
還有你提到的
正確的格式,要拿這個格式當範例,該怎麼挑出其他不正確的格式?
也請把具體的一些資料上來.
fun13832 iT邦新手 5 級 ‧ 2011-08-05 12:53:15 檢舉
謝謝!!大概有跑出來了!只是大概,我還太嫩了,該好好用功念念了。

1 個回答

2
wiseguy
iT邦超人 1 級 ‧ 2011-08-03 23:12:50
最佳解答

如果你的資料內容真的是 </p><h3> 的話,那麼你用的
select .... where description like '%</p><h3>%'
以及
select .... where LOCATE('</p><h3>',description)
應該是能夠查得出才對。

不過如果 </p> 跟 <h3> 之間如果有空白或換行,就會查不出。必須用 RegExp:
select .... where description RegExp '</p>[[:space:]]*<h3>'

我要發表回答

立即登入回答