久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

oracle sql語言模糊查詢的示例分析

共計(jì) 4362 個(gè)字符,預(yù)計(jì)需要花費(fèi) 11 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下 oracle sql 語言模糊查詢的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

oracle 在 Where 子句中,可以對(duì) datetime、char、varchar 字段類型的列用 Like 子句配合通配符選取那些“很像 …”的數(shù)據(jù)記錄,以下是可使用的通配符:

%  零或者多個(gè)字符

_  單一任何字符(下劃線)

\  特殊字符

oracle10g 以上支持正則表達(dá)式的函數(shù)主要有下面四個(gè):

1,REGEXP_LIKE:與 LIKE 的功能相似
2,REGEXP_INSTR:與 INSTR 的功能相似
3,REGEXP_SUBSTR:與 SUBSTR 的功能相似
4,REGEXP_REPLACE:與 REPLACE 的功能相似

POSIX 正則表達(dá)式由標(biāo)準(zhǔn)的元字符(metacharacters)所構(gòu)成:
^ 匹配輸入字符串的開始位置,在方括號(hào)表達(dá)式中使用,此時(shí)它表示不接受該字符集合。
$ 匹配輸入字符串的結(jié)尾位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,則 $ 也匹
配 \n 或 \r。
. 匹配除換行符之外的任何單字符。
? 匹配前面的子表達(dá)式零次或一次。
+ 匹配前面的子表達(dá)式一次或多次。
* 匹配前面的子表達(dá)式零次或多次。
| 指明兩項(xiàng)之間的一個(gè)選擇。例子 ^([a-z]+|[0-9]+)$ 表示所有小寫字母或數(shù)字組合成的
字符串。
() 標(biāo)記一個(gè)子表達(dá)式的開始和結(jié)束位置。
[] 標(biāo)記一個(gè)中括號(hào)表達(dá)式。
{m,n} 一個(gè)精確地出現(xiàn)次數(shù)范圍,m= 出現(xiàn)次數(shù) =n,{m} 表示出現(xiàn) m 次,{m,} 表示至少
出現(xiàn) m 次。

\num 匹配 num,其中 num 是一個(gè)正整數(shù)。對(duì)所獲取的匹配的引用。

字符簇:

[[:alpha:]] 任何字母。
[[:digit:]] 任何數(shù)字。
[[:alnum:]] 任何字母和數(shù)字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大寫字母。
[[:lower:]] 任何小寫字母。
[[:punct:]] 任何標(biāo)點(diǎn)符號(hào)。
[[:xdigit:]] 任何 16 進(jìn)制的數(shù)字,相當(dāng)于 [0-9a-fA-F]。
各種操作符的運(yùn)算優(yōu)先級(jí)
\ 轉(zhuǎn)義符
(), (?:), (?=), [] 圓括號(hào)和方括號(hào)
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和順序
|
*/

其中關(guān)于條件,SQL 提供了四種匹配模式:

1,%:表示任意 0 個(gè)或多個(gè)字符。可匹配任意類型和長度的字符,有些情況下若是中文,請(qǐng)使用兩個(gè)百分號(hào)(%%)表示。

比如 SELECT * FROM [user] WHERE u_name LIKE % 三 %

將會(huì)把 u_name 為“張三”,“張貓三”、“三腳貓”,“唐三藏”等等有“三”的記錄全找出來。

另外,如果需要找出 u_name 中既有“三”又有“貓”的記錄,請(qǐng)使用 and 條件

SELECT * FROM [user] WHERE u_name LIKE % 三 % AND u_name LIKE % 貓 %

若使用 SELECT * FROM [user] WHERE u_name LIKE % 三 % 貓 %
雖然能搜索出“三腳貓”,但不能搜索出符合條件的“張貓三”。

2,_:表示任意單個(gè)字符。匹配單個(gè)任意字符,它常用來限制表達(dá)式的字符長度語句:

比如 SELECT * FROM [user] WHERE u_name LIKE _三_

只找出“唐三藏”這樣 u_name 為三個(gè)字且中間一個(gè)字是“三”的;

再比如 SELECT * FROM [user] WHERE u_name LIKE 三__

只找出“三腳貓”這樣 name 為三個(gè)字且第一個(gè)字是“三”的;

3. regexp_like 正則表達(dá)式函數(shù)查詢

-- 查詢 FieldName 中以 1 開頭 60 結(jié)束的記錄并且長度是 7 位
select * from fzq where FieldName like  1____60 
select * from fzq where regexp_like(FieldName, 1....60 
-- 查詢 FieldName 中以 1 開頭 60 結(jié)束的記錄并且長度是 7 位并且全部是數(shù)字的記錄。-- 使用 like 就不是很好實(shí)現(xiàn)了。select * from fzq where regexp_like(FieldName, 1[0-9]{4}60 
--  也可以這樣實(shí)現(xiàn),使用字符集。select * from fzq where regexp_like(FieldName, 1[[:digit:]]{4}60 
--  查詢 FieldName 中不是純數(shù)字的記錄
select * from fzq where not regexp_like(FieldName, ^[[:digit:]]+$ 
--  查詢 FieldName 中不包含任何數(shù)字的記錄。select * from fzq where regexp_like(FieldName, ^[^[:digit:]]+$ 
-- 查詢以 12 或者 1b 開頭的記錄. 不區(qū)分大小寫。select * from fzq where regexp_like(FieldName, ^1[2b] , i 
-- 查詢以 12 或者 1b 開頭的記錄. 區(qū)分大小寫。select * from fzq where regexp_like(FieldName, ^1[2B] 
--  查詢數(shù)據(jù)中包含空白的記錄。select * from fzq where regexp_like(FieldName, [[:space:]] 
-- 查詢所有包含小寫字母或者數(shù)字的記錄。select * from fzq where regexp_like(FieldName, ^([a-z]+|[0-9]+)$ 
-- 查詢?nèi)魏伟瑯?biāo)點(diǎn)符號(hào)的記錄。select * from fzq where regexp_like(FieldName, [[:punct:]]

第一種

  if test= AGTNAM !=null and AGTNAM != 
  ![CDATA[and AGTNAM like concat(concat( % ,#{AGTNAM}), % ))]] 
  /if

第二種

  select id= selectUserByName  parameterType= string  resultType= user 
 select * from user where username like  %${value}% 
  /select

備注:${}可以接收簡單類型值或 pojo 屬性值,如果 parameterType 傳輸單個(gè)簡單類型值,${}括號(hào)中只能是 value,使用 ${}不能防止 sql 注入,但是有時(shí)用 ${}會(huì)非常方便

  日期的處理

1,數(shù)據(jù)庫里存的是 date 使用 insert 語句

insert into mytest_t values(1, 張三 ,to_date( 2011-09-09 , yyyy-MM-dd)) 
insert into mytest_t values(1, 張三 ,to_date( 20110909 , yyyyMMdd))

2,數(shù)據(jù)庫里面存的時(shí) varchar2  直接插入

insert into mytest_t values(1, zhangdan , 2011-09-09)

3,查詢,數(shù)據(jù)庫存的是 varchar2

日期輸出的格式是由 to_char 決定的

select to_char(to_date(birthday01, yyyy-mm-dd), yyyy-MM-dd ) from MYTEST_T  輸出是:yyyy-MM-dd
select to_char(to_date(birthday01, yyyy-mm-dd), yyyyMMdd ) from MYTEST_T  輸出是:yyyyMMdd

4,查詢,數(shù)據(jù)庫存的是 date

select to_char(birthday, yyyy-MM-dd) from MYTEST_T  格式   是由 to_char  決定的
select to_char(birthday, yyyyMMdd) from MYTEST_T 
select to_char(sysdate, yyyy-MM-dd hh34:mi:ss) as nowTime from dual; // 日期轉(zhuǎn)化為字符串  
select to_char(sysdate, yyyy) as myyear from mytest; // 獲取時(shí)間的年  
select to_char(sysdate, mm) as myMonth from mytest; // 獲取時(shí)間的月  
select to_char(sysdate, dd) as myDay from mytest; // 獲取時(shí)間的日  
select to_char(sysdate, hh34) as myHour from mytest; // 獲取時(shí)間的時(shí)  
select to_char(sysdate, mi) as myMinute from mytest; // 獲取時(shí)間的分  
select to_char(sysdate, ss) as mySecond from mytest; // 獲取時(shí)間的秒

補(bǔ)充:

在學(xué)習(xí) mybatis 的學(xué)習(xí)中,用到模糊查詢的時(shí)候,發(fā)現(xiàn)直接拼接成‘% #{description} % 會(huì)報(bào)錯(cuò),然后整理了三種模糊查詢的 SQL 語句寫法:

1. 在傳參的時(shí)候,就把參數(shù)拼接為 % +#{description}+ %   然后傳到 XML 文件的 SQL 語句中,這樣就避免了在 SQL 語句中拼接出錯(cuò)(在 ORACLE 數(shù)據(jù)庫中或許會(huì)報(bào)“ORA-01722: 無效字符”錯(cuò)誤,針對(duì) ORACLE 可以修改成 % ||#{description}|| %)

2. 使用 SQL 的 concat 函數(shù) 在 SQL 語句進(jìn)行拼接,這樣拼接的 SQL 語句也是符合要求的,如:

SELECT * FROM MESSAGE WHERE DESCRIPTION like CONCAT(CONCAT( % ,#{description}), %

3. 使用 ${description}替換,#{description}就可以直接用 %${description}%,如:

SELECT * FROM MESSAGE WHERE DESCRIPTION like  %${description}%

上面三種方式中,以第二種為最,幾乎無論什么情形都可以使用,而第一種和第三種都需要有一些前提條件才可以使用,不過在正常的工作中,幾乎都可以使用到這三種方法。今天整理出來,也為大家以后再次遇到這種情況提供一點(diǎn)小小的幫助。

注:第三種方法不推薦大家使用,有可能會(huì)出現(xiàn) sql 注入風(fēng)險(xiǎn)

以上是“oracle sql 語言模糊查詢的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計(jì)4362字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 无为县| 修武县| 视频| 华阴市| 六盘水市| 海门市| 昂仁县| 台江县| 莎车县| 苗栗县| 双流县| 麻江县| 蛟河市| 大埔区| 娄底市| 泸定县| 临漳县| 嘉禾县| 宁海县| 三台县| 若羌县| 南雄市| 报价| 永州市| 田林县| 鹿邑县| 西宁市| 汉中市| 中西区| 汽车| 交口县| 东平县| 穆棱市| 五莲县| 保亭| 高清| 体育| 安龙县| 天门市| 武陟县| 甘德县|