《Mysql必讀sql like通配符與模糊查詢》要點(diǎn):
本文介紹了Mysql必讀sql like通配符與模糊查詢,希望對您有用。如果有疑問,可以聯(lián)系我們。
MYSQL數(shù)據(jù)庫1,sql like對時(shí)間查詢的處理方法
sql數(shù)據(jù)表中有savetime(smalldatetime類型)字段,表中有兩條記錄,savetime值為:2005-3-8 12:12:00和2005-6-6 14:02:02
用以下語法得不到搜索結(jié)果:?
?
MYSQL數(shù)據(jù)庫sql幫助中說:
"當(dāng)搜索 datetime 值時(shí),推薦使用 like,因?yàn)?datetime 項(xiàng)可能包含各種日期部分.例如,如果將值 19981231 9:20 插入到名為 arrival_time 的列中,則子句 where arrival_time = 9:20 將無法找到 9:20 字符串的精確匹配,因?yàn)?sql server 將其轉(zhuǎn)換為 1900 年 1 月 1 日上午 9:20.然而,子句 where arrival_time like '%9:20%' 將找到匹配."
后運(yùn)行下面語句select soft.*, cast(soft.savetime as varchar(20)) as strdatetime,
發(fā)現(xiàn)
sql把smalldatetime格試轉(zhuǎn)成:
03 8 2005 12:12pm
我何用 like'%2005-3-8%'搜索到2005年3月8日所有的記錄?
?
MYSQL數(shù)據(jù)庫2, sql對like 操作中的特殊字符處理方法:
sql server查詢過程中,單引號(hào) ' 是特殊字符,所以在查詢的時(shí)候要轉(zhuǎn)換成雙單引號(hào) '' .
在like操作還有以下特殊字符:下劃線_,百分號(hào)%,方括號(hào)[],尖號(hào)^.
MYSQL數(shù)據(jù)庫其用途如下:
下劃線:用于代替一個(gè)任意字符(相當(dāng)于正則表達(dá)式中的 ? )
百分號(hào):用于代替任意數(shù)目的任意字符(相當(dāng)于正則表達(dá)式中的 * )
方括號(hào):用于轉(zhuǎn)義(事實(shí)上只有左方括號(hào)用于轉(zhuǎn)義,右方括號(hào)使用最近優(yōu)先原則匹配最近的左方括號(hào))
尖號(hào):用于排除一些字符進(jìn)行匹配(這個(gè)與正則表達(dá)式中的一樣)
以下是一些匹配的舉例,需要說明的是,只有l(wèi)ike操作才有這些特殊字符,=操作是沒有的.
?
MYSQL數(shù)據(jù)庫在實(shí)際進(jìn)行處理的時(shí)候,對于=操作,我們一般只需要如此替換:
' -> ''
對于like操作,需要進(jìn)行以下替換(注意順序也很重要)
?
MYSQL數(shù)據(jù)庫3,sql like 通配符特殊用法:escape
MYSQL數(shù)據(jù)庫闡述escape 的作用:
1.使用?? escape?? 關(guān)鍵字定義轉(zhuǎn)義符.在模式中,當(dāng)轉(zhuǎn)義符置于通配符之前時(shí),該通配符就解釋為普通字符.例如,要搜索在任意位置包含字符串?? 5%?? 的字符串,請使用:???
where?? columna?? like?? '%5/%%'?? escape?? '/'
但是在mysql中好像不能使用"".
2.escape?? 'escape_character'???
允許在字符串中搜索通配符而不是將其作為通配符使用.
escape_character?? 是放在通配符前表示此特殊用途的字符.??
?
MYSQL數(shù)據(jù)庫意思就是:
比如,要搜索一個(gè)字符串???? "g_"???? ,如果直接???? like???? "g_",那么?? "_"的作用就是通配符,而不是字符,結(jié)果,我們會(huì)查到比如???? "ga","gb","gc",而不是我們需要的?? "g_".
用???? like?? 'gs_'?? escape?? 's'???? 's'表示特殊用法標(biāo)志
3.
MYSQL數(shù)據(jù)庫結(jié)果為:
name???????????????
----------???
11%33
12%33
總結(jié):
?
MYSQL數(shù)據(jù)庫對于字符串中出現(xiàn)的特殊字符:'%','[','[]', '_' 可以使用 '[]' 把它們包含起來,這樣在匹配模式(pattern)中,它們就被當(dāng)作普通字符對待了.
1,用 like '[[]' 匹配特殊字符 '['
select 1 where '[abcde' like '[[]%'
MYSQL數(shù)據(jù)庫2,用 like ']' 匹配特殊字符 ']'
select 1 where ']abcde' like ']%'
MYSQL數(shù)據(jù)庫3,用 like '[[]]' 匹配特殊字符 '[]'
select 1 where '[]abcde' like '[[]]%%'
MYSQL數(shù)據(jù)庫4,用 like '[_]' 匹配特殊字符 '_'
select 1 where '_abcde' like '[_]%'
MYSQL數(shù)據(jù)庫5,用 like '[%]' 匹配特殊字符 '%'
select 1 where 'abc%de' like 'abc[%]de'
對于其他的特殊字符:'^', '-', ']' 因?yàn)樗鼈儽旧碓诎?'[]' 中使用,所以需要用另外的方式來轉(zhuǎn)義,于是就引入了 like 中的 escape 子句.
注意,escape 可以轉(zhuǎn)義所有的特殊字符.
?
MYSQL數(shù)據(jù)庫規(guī)律就是用 escape 后面緊跟著的字符來做轉(zhuǎn)義字符. escape 后面的字符相當(dāng)于 c 語言字符串中的轉(zhuǎn)義字符 ''.
最后,看一個(gè)更加復(fù)雜的匹配
?
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/6477.html