麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > 綜合 > 正文

sql like 時間 通配符 模糊查詢技巧及特殊字符

2024-07-21 02:52:30
字體:
來源:轉載
供稿:網友

最近碰到like模糊匹配的問題,找到一些答案接觸迷惑,覺得有知識是自己忽略的,現在整理出來,既強化記憶,又是一次記錄,以下轉自一篇Blog,關于sql server like的通配符和字符帶通配符的處理辦法。

1. SQL like對時間查詢的處理方法

    SQL數據表中有savetime(smalldatetime類型)字段,表中有兩條記錄,savetime值為:2005-3-8 12:12:00和2005-6-6 14:02:02      我用下面語句什么也搜不出來      select * from soft where soft.savetime like'%2005-3-8%'      SQL幫助中說:      "當搜索 datetime 值時,推薦使用 LIKE,因為 datetime 項可能包含各種日期部分。例如,如果將值 19981231 9:20 插入到名為 arrival_time 的列中,則子句 WHERE arrival_time = 9:20 將無法找到 9:20 字符串的精確匹配,因為 SQL Server 將其轉換為 1900 年 1 月 1 日上午 9:20。然而,子句 WHERE arrival_time LIKE '%9:20%' 將找到匹配。"      后運行下面語句SELECT soft.*, CAST(soft.savetime AS varchar(20)) AS strdatetime, 發現SQL把smalldatetime格試轉成:03 8 2005 12:12PM      我何用 like'%2005-3-8%'搜索到2005年3月8日所有的記錄?

     select * from soft where datediff(d,soft.savetime,convert(datetime,'20050308',121))=0      ----     select * from soft where convert(char(10),soft.savetime,121)='20050308'

2. SQL對like 操作中的特殊字符處理方法:

SQL Server查詢過程中,單引號 ' 是特殊字符,所以在查詢的時候要轉換成雙單引號 '' 。

在like操作還有以下特殊字符:下劃線_,百分號%,方括號[],尖號^。

其用途如下:

下劃線:用于代替一個任意字符(相當于正則表達式中的 ? )

百分號:用于代替任意數目的任意字符(相當于正則表達式中的 * )

方括號:用于轉義(事實上只有左方括號用于轉義,右方括號使用最近優先原則匹配最近的左方括號)

尖號:用于排除一些字符進行匹配(這個與正則表達式中的一樣)

以下是一些匹配的舉例,需要說明的是,只有like操作才有這些特殊字符,=操作是沒有的。

a_b...        a[_]b%

a%b...       a[%]b%

a[b...       a[[]b%

a]b...       a]b%

a[]b...      a[[]]b%

a[^]b...     a[[][^]]b%

a[^^]b...    a[[][^][^]]b%

在實際進行處理的時候,對于=操作,我們一般只需要如此替換:

' -> ''

對于like操作,需要進行以下替換(注意順序也很重要)

[ -> [[]     (這個必須是第一個替換的!!)

% -> [%]    (這里%是指希望匹配的字符本身包括的%而不是專門用于匹配的通配符)

_ -> [_]

^ -> [^]

3,SQL Like 通配符特殊用法:Escape

    闡述Escape 的作用:

    1.使用   ESCAPE   關鍵字定義轉義符。在模式中,當轉義符置于通配符之前時,該通配符就解釋為普通字符。例如,要搜索在任意位置包含字符串   5%   的字符串,請使用:        WHERE   ColumnA   LIKE   '%5/%%'   ESCAPE   '/'     但是在MySQL中好像不能使用"/"。    2.ESCAPE   'escape_character' 允許在字符串中搜索通配符而不是將其作為通配符使用。escape_character   是放在通配符前表示此特殊用途的字符。        SELECT   * FROM   finances WHERE   description   LIKE   'gs_'   ESCAPE   'S'        意思就是:     比如,我們要搜索一個字符串     "g_"     ,如果直接     like     "g_",那么   "_"的作用就是通配符,而不是字符,結果,我們會查到比如 "ga","gb","gc",而不是我們需要的   "g_". 用     LIKE   'gs_'   ESCAPE   'S'     's'表示特殊用法標志

 

    3.create   table   a   (name   varchar(10))     go     insert   into   a   select   '11%22'     union   all   select   '11%33'     union   all   select   '12%33'     go     select   *   from   a     WHERE   name   LIKE   '%/%33'   ESCAPE   '/'   --指定用'/'符號來說明跟在其后面的通配符字符為普能字符。(第二個%是字符不是通配符來的)     go     drop   table   a

    結果為:     name                    ----------        11%33     12%33

 

    總結:

    %:匹配零個及多個任意字符; _:與任意單字符匹配; []:匹配一個范圍; [^]:排除一個范圍

    Symbol Meaning     like '5[%]' 5%      like '[_]n' _n      like '[a-cdf]' a, b, c, d, or f      like '[-acdf]' -, a, c, d, or f      like '[[]' [      like ']' ]      like 'abc[_]d%' abc_d and abc_de      like 'abc[def]' abcd, abce, and abcf      like '[^1-9]' 0     like '[^1-9b-z]' 0, a

    對于字符串中出現的特殊字符:'%','[','[]', '_' 可以使用 '[]' 把它們包含起來,這樣在匹配模式(pattern)中,它們就被當作普通字符對待了。

    1. 用 like '[[]' 匹配特殊字符 '['    select 1 where '[ABCDE' like '[[]%'

    2. 用 like ']' 匹配特殊字符 ']'

    select 1 where ']ABCDE' like ']%'

    3. 用 like '[[]]' 匹配特殊字符 '[]'

    select 1 where '[]ABCDE' like '[[]]%%'

    4. 用 like '[_]' 匹配特殊字符 '_'

    select 1 where '_ABCDE' like '[_]%'

    5. 用 like '[%]' 匹配特殊字符 '%'

    select 1 where 'ABC%DE' like 'ABC[%]DE'

    對于其他的特殊字符:'^', '-', ']' 因為它們本身在包含在 '[]' 中使用,所以需要用另外的方式來轉義,于是就引入了 like 中的 escape 子句,另外值得注意的是:escape 可以轉義所有的特殊字符。

    select 1 where '^ABCDE' like '!^ABCDE' escape '!'    select 1 where '-ABCDE' like '!-ABCDE' escape '!'    select 1 where ']ABCDE' like '!]ABCDE' escape '!'

    select 1 where '%ABCDE' like '/%ABCDE' escape '/'    select 1 where '%ABCDE' like '!%ABCDE' escape '!'    select 1 where '%ABCDE' like '#%ABCDE' escape '#'    select 1 where '%ABCDE' like '@%ABCDE' escape '@'

    select 1 where '[ABCDE' like '![ABCDE' escape '!'    select 1 where ']ABCDE' like '!]ABCDE' escape '!'    規律就是用 escape 后面緊跟著的字符來做轉義字符。 escape 后面的字符相當于 C 語言字符串中的轉義字符 '/'。

    最后,看一個更加復雜的匹配


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品999在线观看 | 精品中文字幕在线播放 | 欧美a在线观看 | 欧美精品a∨在线观看不卡 午夜精品影院 | 2021免费日韩视频网 | 中文字幕在线观看免费视频 | 毛片av网 | 精品国产一区二区三区四区阿崩 | 欧美国产免费 | 久久久久久久99 | 特级西西444www大精品视频免费看 | 久久久久久艹 | 成年性羞羞视频免费观看 | 国产精品久久久久久久久久10秀 | 久久亚洲春色中文字幕久久 | 国产精品爱久久久久久久 | 空姐毛片 | 亚洲性在线视频 | 国产好片无限资源 | 欧美a区| a黄网站 | 精品亚洲视频在线 | 斗罗破苍穹在线观看免费完整观看 | 免费观看视频91 | 综合精品一区 | 亚洲成人福利在线 | 在线成人影视 | 99热99精品| 九一国产精品 | 91精品久久香蕉国产线看观看 | 色七七亚洲 | 狠狠干天天操 | 中文字幕精品在线播放 | 欧美成人自拍 | 国产18视频 | 精品三区视频 | 国产一区二区三区四区在线 | 国产亚洲欧美视频 | av成人在线观看 | 精国产品一区二区三区 | 国产亚洲综合一区二区 |