sql正則表達式匹配
Ⅰ 正則表達式,從sql語句中匹配主鍵,外鍵,主鍵表名
1.不為空
create table emp_02
(
col number,
col1 varchar(20) not null,
col2 varchar(20) constraint emp_not_null not null
)
2.unique
create table emp_02
(
col number,
col1 varchar(20) unique,
col2 varchar(20),
constraint emp_unique unique(col2)
)
3 primary key
create table emp_03
(
col number primary key,
col1 varchar(20),
col2 varchar(20)
)
4 foreign key
create table emp_05
(
col number primary key,
colforeign number,
col1 varchar(20),
col2 varchar(20),
constraint fk_col foreign key(colforeign) references emp_04(col)
)
5 check
create table emp_10
(
col number,
col1 varchar(20),
col2 varchar(20),
constraint ch_col2 check (col2 in('男','女'))
)
6 添加約束
create table emp_06
(
col number,
col1 varchar(20) constraint fk_emp_06 primary key,
col2 varchar(20)
)
create table emp_07
(
col number,
col1 varchar(20),
col2 varchar(20)
)
alter table emp_07 add constraint AAAA foreign key(col1) references emp_06(col1)
7 刪除約束
alter table emp_07 drop constraint AAAA
ALTER TABLE emp_06 DROP PRIMARY KEY CASCADE
8 查詢約束
SELECT constraint_name, constraint_type,
search_condition
FROM user_constraints
WHERE table_name = 'EMP_03';
--5、商品推薦默認為0
alter table proct
add constraint DF_recommend default 0 for [pro_recommend]
Ⅱ SQL Server 2008 R2如何使用正則表達式搜索
正則表達式是簡明而靈活的表示法,用於查找和替換各種模式的文本。在 SQL Server Management Studio 的「查找和替換」對話框中的「查找內容」欄位中,可以使用一組特定的正則表達式。
使用正則表達式進行查找
1、若要在「快速查找」、「在文件中查找」、「快速替換」或 「在文件中替換」 操作過程中,在「查找內容」欄位啟用正則表達式,請在「查找選項」下選中「使用」,再選擇「正則表達式」。
2、「查找內容」欄位旁邊的「引用列表」三角形按鈕將變為可用狀態。單擊此按鈕可顯示一組最常用的正則表達式。如果選擇了表達式生成器中的某個項,則可將該項插入「查找內容」字元串。
注意:
「查找內容」字元串中使用的正則表達式與 Microsoft .NET Framework 編程中的有效正則表達式相比,語法上存在差異。例如,在「查找和替換」對話框中,大括弧 {} 用於表示帶標記的表達式。所以,表達式「zo{1}」將匹配所有「zo」後帶標記 1 的匹配項,如「Alonzo1」和「Gonzo1」。但在 .NET Framework 中,{} 符號用於表示量詞。因此,表達式「zo{1}」將匹配所有「z」後跟一個「o」的匹配項,如匹配「zone」,但不匹配「zoo」。
下表對「引用列表」中提供的正則表達式進行了說明。
表達式
語法
說明
任何單個字元: . 匹配除換行符外的所有單一字元。
零個或更多:* 匹配零或更多前導表達式的匹配項,執行所有可能的匹配。
一個或更多:+ 匹配至少一個前導表達式的匹配項。
行首:^ 僅匹配行首位置的字元串。
行尾:$ 僅匹配行尾位置的字元串。
字首:< 僅匹配文本中以此開頭的字。
字尾:> 僅匹配文本中以此結尾的字。
分行符:\n 匹配與平台無關的換行符。在替換表達式中,插入一個換行符。
在集合中的任何一個字元:[] 匹配 [] 中的任何一個字元。若要指定字元范圍,請列出起始字元和結束字元,並用短劃線 (-) 分隔,如 [a-z]。
不在集合中的任何一個字元:[^...] 匹配不在 ^ 之後的字元集中的任何一個字元。
或:| 匹配「或」符號 (|) 兩旁的任一表達式。常用於組中。例如,(sponge|mud) bath 可以匹配「sponge bath」和「mud bath」。
Escape:\ 將反斜杠 (\) 後的字元作為文字匹配。此表達式允許您搜索正則表達式標記中使用的符號,如 { 和 ^。例如, \^ 可用於查找字元 ^。
標記表達式:{} 匹配用括起來的表達式內的文本。
C/C++ 標識符: :i 匹配表達式 ([a-zA-Z_$][a-zA-Z0-9_$]*)。
用引號括起來的字元串: :q 匹配表達式 (("[^"]*")|('[^']*'))。
空格或製表符: :b 匹配空格或製表符。
整數: :z 匹配表達式 ([0-9]+)。
「引用列表」中只列出了部分可在「查找和替換」操作中使用的正則表達式。還可以將下列任一正則表達式插入「查找內容」字元串:
表達式 語法 說明
最少 - 零個或更多:@ 匹配零個或更多前導表達式的匹配項,匹配盡可能少的字元。
最少 - 一個或更多: # 匹配一個或更多前導表達式的匹配項,匹配盡可能少的字元。
重復 n 次:^n 匹配前導表達式的 n 個匹配項。例如,[0-9]^4 匹配所有四位數序列。
分組:() 將子表達式分組
第 n 個標記文本:\n 在「查找或替換」表達式中,指示匹配第 n 個標記表達式的文本,其中 n 為 1 到 9 之間的數字。
在「替換」表達式中,\0 將插入完整的匹配文本。
右對齊欄位:\(w,n) 在「替換」表達式中,在寬度至少為 w 個字元的欄位中,右對齊第 n 個標記表達式。
左對齊欄位:\(-w,n) 在「替換」表達式中,在寬度至少為 w 個字元的欄位中,左對齊第 n 個標記表達式。
阻止匹配:~(X) 如果在表達式的此處出現 X,則阻止匹配。例如,real~(ity) 匹配「realty」和「really」中的「real」,但不匹配「reality」中的「real」。
字母數字字元: :a 匹配表達式 ([a-zA-Z0-9])。
字母字元: :c 匹配表達式 ([a-zA-Z])。
十進制數字: :d 匹配表達式 ([0-9])。
十六進制數: :h 匹配表達式 ([0-9a-fA-F]+)。
有理數: :n 匹配表達式 (([0-9]+.[0-9]*)|([0-9]*.[0-9]+)|([0-9]+))。
字母字元串: :w 匹配表達式 ([a-zA-Z]+)。
Escape:\e Unicode U+001B。
響鈴: \g Unicode U+0007。
Backspace: \h Unicode U+0008。
製表符: \t 匹配製表符,Unicode U+0009。
Unicode 字元:\x#### 或 \u#### 匹配由 Unicode 值確定的字元,其中 #### 為十六進制數字。可以使用 ISO 10646 碼位或給出代理項對值的兩個 Unicode 碼位,指定基本多語言面(即代理項)以外的字元。
下表列出了按標准 Unicode 字元屬性匹配時的語法。雙字母縮寫和 Unicode 字元屬性資料庫中列出的縮寫相同。可以將這些縮寫指定為字元集的一部分。例如,表達式 [:Nd:Nl:No] 匹配任何數字。
表達式 語法 說明
大寫字母
:Lu
匹配任何單個大寫字母。例如,:Luhe 匹配「The」,但不匹配「the」。
小寫字母
:Ll
匹配任何單個小寫字母。例如,:Llhe 匹配「the」,但不匹配「The」。
標題大寫字母
:Lt
匹配一個大寫字母後跟一個小寫字母的字元,例如 Nj 和 Dz。
修飾字母
:Lm
匹配字母或標點符號(如逗號、交叉重音符和秒號),這些字母或標點符號是用於修飾前導字母的。
其他字母
:Lo
匹配其他字母,如歌特字母 ahsa。
十進制數字
:Nd
匹配十進制數字(如 0-9)及其全形對等數字。
字母數字
:Nl
匹配字母數字,如羅馬數字和零的表意數字。
其他數字
:No
匹配其他數字,如舊斜體數字一。
左標點
:Ps
匹配左標點,如左小括弧和左大括弧。
右標點
:Pe
匹配右標點,如右小括弧和右大括弧。
左引號
:Pi
匹配左雙引號。
右引號
:Pf
匹配單引號和右雙引號。
劃線號
:Pd
匹配劃線號。
連接號
:Pc
匹配下劃線符號。
其他標點
:Po
匹配 (,)、?、"、!、@、#、%、&、*、\、(:)、(;)、' 和 /。
空格分隔符
:Zs
匹配空格。
行分隔符
:Zl
匹配 Unicode 字元 U+2028。
段落分隔符
:Zp
匹配 Unicode 字元 U+2029。
不佔位標記
:Mn
匹配不佔位標記。
合並標記
:Mc
匹配合並標記。
封閉標記
:Me
匹配封閉標記。
數學符號
:Sm
匹配 +、=、~、|、< 和 >。
貨幣符號
:Sc
匹配 $ 和其他貨幣符號。
修飾符號
:Sk
匹配修飾符號,如抑揚符、重音符和長音符。
其他符號
:So
匹配其他符號,如版權符號、段落標記和度數符號。
其他控制
:Cc
匹配行尾。
其他格式
:Cf
格式化控制字元,如雙向控制字元。
代理項
:Cs
匹配代理項對的一半。
其他專門用途
:Co
匹配任何專用區域的字元。
其他未分配字元
:Cn
匹配未映射到 Unicode 字元的字元。
除了標準的 Unicode 字元屬性以外,還可以將下列附加屬性指定為字元集的一部分。
表達式
語法
說明:
字母
:Al
匹配任何單字元。例如,:Alhe 匹配「The」、「then」 和「reached」之類的字。
Numeric
:Nu
匹配任何數字。
標點
:Pu
匹配任意一個標點符號,如 ?、@、' 等等。
空格
:Wh
匹配任何類型的空格,包括印刷空格和表意空格。
雙向
:Bi
匹配自右至左書寫的字元,如阿拉伯語和希伯萊語字元。
朝鮮文字
:Ha
匹配朝鮮文字字母和組合字母。
平假名
:Hi
匹配平假名字元。
片假名
:Ka
匹配片假名字元。
象形/漢字/日文漢字
:Id
匹配象形字元,如漢字和日文漢字。
Ⅲ SQL的正則表達式
注意:正則表達式後面需用''括起來,因為正則表達式是針對「文本」的匹配。
正則表達式REGEXP可以理解為可支持更多規則/通配符的LIKE,可以對檢索內容進行更強的控制。LIKE本身只能和%及_這兩種通配符連接進行粗略的搜索,而REGEXP可以支持更多規則,比如.是和%一樣的可匹配任意一個字元的正則模式,[]可匹配一個范圍,如REGEXP '[1-5] ton'可以搜索出來1 ton、2 ton、3 ton、4 ton、5 ton。
一些正則模式:
. :匹配任意一個字元,類似於%
| :類似於OR
[] :字元集合,可用|隔開表or選項,也可用-定義范圍
[^] :類似於NOT,匹配非[]框內的
定位元字元 :
^ :匹配輸入字元串的開始位置【^有兩種用法,一種是開始位置,一種和[]連在一起表示NOT】
$ :匹配輸入字元串的結束位置
[[:<:]] :詞的開始
[[:<:]] :詞的結尾
字元類 (預定義的字元集,類似「快捷鍵」):
重復元字元 :
* :0次或多次匹配
+ :1次或多次匹配(等於{1,})
? :匹配它前面的任何字元0次或1次(等於{0,1})
{n} :指定數目的匹配
{n,} :不少於指定數目的匹配
{n,m} :匹配數目的范圍(m不超過255)
正則表達式略復雜,但用好了會非常方便,所以務必把各種正則模式記熟。
關於特殊字元所在位置會造成不同影響,有個小例子:
^[0-9\\.]表示查找以0-9里任意一個數字和「.」開頭的字元串
[^0-9\\.]表示除了「0-9.」這個單詞外的任意字元串
轉義
如果想搜出代表正則模式字元本身,比如想查找「.」,如果直接輸REGEXP '.',那麼查找出來的將是全部行,因為「.」表示任意字元;又比如想查找「|」,直接輸REGEXP '|',那麼查找不出結果,因為正則表達式認為這是or的含義,此時需要用到「轉義」的功能,即在想查找的特殊字元前輸入兩條斜杠——「//」,告訴正則表達式現在要查找的是特殊字元本身,而不是它所代表的含義。
另外還有一些在SQL練習中碰到的其他注意事項:
NOT只對單個欄位有效,如果想多重否定,需要在每個欄位前都加上NOT,比如 WHERE vend_id NOT IN(1002,1003) AND prod_price NOT IN (5.99);
通配符%可以任意長度的字元,包括0字元,但不能匹配出NULL;_只能匹配單個字元。注意盡量少使用通配符,並且盡量不要在開頭使用,避免搜索時間過長。
Ⅳ 資料庫筆記-SQL過濾(LIKE&正則表達式)
查詢語句:
結果:
查詢語句:
結果:
查詢語句:
結果:
查詢語句:
正則表達式 [32]1,[32]定義一組字元,它的意思是匹配 3 或匹配 2,也就是「31」或者 「21」都算是匹配的。
結果:
查詢語句:
結果:
如果要匹配特殊字元的,需要加上前導「」,「-」表示查找「-」,「.」表示查找「.」
這種就是 「轉義(escaping)」 ,在正則表達式里,本身有意義的字元,比如「.」是匹配任意字元的意思。那如果要匹配它,需要轉義。
注意:在 MySQL 里,是比其他的正則表達式多一個「」的,就是「」。
趣味提問:
如何匹配「」?
答案:「\」
\([0-9] sticks?\) 匹配的是(NUM stick)或者(NUM sticks)。s後的 ? 使得s可選。
重復元字元
* 是 0 個或多個匹配
? 是 1 個或多個匹配
{n} 是指定n個匹配
{n,} 是 不少於 n 個匹配
{n,m} 是 指定匹配的范圍,m不超過 255
查詢語句:
^值的是字元串的開始,$是字元串的結尾。
這就是 REGEXP 與 LIKE 類似,但是它獨特的好處:可以通過「定位符」只匹配「子字元串」。
結果:
Ⅳ oracle SQL 正則表達式
用 Oracle Database 10g 使用正規表達式
您可以使用最新引進的 Oracle SQL REGEXP_LIKE 操作符和 REGEXP_INSTR、REGEXP_SUBSTR 以及 REGEXP_REPLACE 函數來發揮正規表達式的作用。您將體會到這個新的功能如何對 LIKE 操作符和 INSTR、SUBSTR 和 REPLACE 函數進行了補充。實際上,它們類似於已有的操作符,但現在增加了強大的模式匹配功能。被搜索的數據可以是簡單的字元串或是存儲在資料庫字元列中的大量文本。正規表達式讓您能夠以一種您以前從未想過的方式來搜索、替換和驗證數據,並提供高度的靈活性。
正規表達式的基本例子
在使用這個新功能之前,您需要了解一些元字元的含義。句號 (.) 匹配一個正規表達式中的任意字元(除了換行符)。例如,正規表達式 a.b 匹配的字元串中首先包含字母 a,接著是其它任意單個字元(除了換行符),再接著是字母 b。字元串 axb、xaybx 和 abba 都與之匹配,因為在字元串中隱藏了這種模式。如果您想要精確地匹配以 a 開頭和以 b 結尾的一條三個字母的字元串,則您必須對正規表達式進行定位。脫字元號 (^) 元字元指示一行的開始,而美元符號 ($) 指示一行的結尾(參見表1:附表見第4頁)。因此, 正規表達式 ^a.b$ 匹配字元串 aab、abb 或 axb。將這種方式與 LIKE 操作符提供的類似的模式匹配 a_b 相比較,其中 (_) 是單字元通配符。
默認情況下,一個正規表達式中的一個單獨的字元或字元列表只匹配一次。為了指示在一個正規表達式中多次出現的一個字元,您可以使用一個量詞,它也被稱為重復操作符。.如果您想要得到從字母 a 開始並以字母 b 結束的匹配模式,則您的正規表達式看起來像這樣:^a.*b$。* 元字元重復前面的元字元 (.) 指示的匹配零次、一次或更多次。LIKE 操作符的等價的模式是 a%b,其中用百分號 (%) 來指示任意字元出現零次、一次或多次。
表 2 給出了重復操作符的完整列表。注意它包含了特殊的重復選項,它們實現了比現有的 LIKE 通配符更大的靈活性。如果您用圓括弧括住一個表達式,這將有效地創建一個可以重復一定次數的子表達式。例如,正規表達式 b(an)*a 匹配 ba、bana、banana、yourbananasplit 等。僅供參考!
Ⅵ 如何在SQL Server中使用正則表達式
在T-SQL中使用正則表達式函數
有想過在T-Sql使用正則表達式嗎?是的,完全可以的,我冊散們可以用SQL SERVER CLR sql function來實現這一功能。
首先,我們在VSTS中創建一Database Project,增一個class, 實現下面的一個方法:
1: /// <summary>
2: /// Regs the ex match.
3: /// </summary>
4: /// <param name="inputValue">The input value.</param>
5: /// <param name="regexPattern">汪團The regex pattern.</param>
6: /// <remarks>Author: Petter Liu http://wintersun.cnblogs.com </remarks>
7: /// <returns>1 match,0 not match</returns>
8: [SqlFunction]
9: public static bool RegExMatch(string inputValue, string regexPattern)
10: {
11: // Any nulls - we can't match, return false
12: if (string.IsNullOrEmpty(inputValue) || string.IsNullOrEmpty(regexPattern))
13: return false;
14:
15: Regex r1 = new Regex(regexPattern.TrimEnd(null));
16: return r1.Match(inputValue.TrimEnd(null)).Success;
17: }
好了,Build後Deploy到你的Target database就OK了,VisualStudio會自動注冊這個州陵氏程序集的。如果,你想手動注冊程序集,可執行以下的T-SQL:
1: CREATE ASSEMBLY [RegExCLR] FROM 'RegExCLR.dll';
2:
3: -- Add the REGEX function. We want a friendly name
4: -- RegExMatch rather than the full namespace name.
5: -- Note the way we have to specify the Assembly.Namespace.Class.Function
6: -- NOTE the RegExCLR.RegExCLR
7: -- (one is the assembly the other is the namespace)
8: CREATE FUNCTION RegExMatch ( @inputCalue NVARCHAR(4000),
9: @regexPattern NVARCHAR(4000) ) RETURNS BIT
10: AS EXTERNAL NAME RegExCLR.RegExCLR.ClrClass.RegExMatch;
OK, 一切OK的後,我們來測試下:
select COUNT(1) from Threads where dbo.RegExMatch(ThreadId,'^[{|\(]?[0-9a-fA-F]{8}[-]?([0-9a-fA-F]{4}[-]?){3}[0-9a-fA-F]{12}[\)|}]?$')=1
上面的T-SQL是找出Threads表ThreadId是GUID的記錄數。 等於1是匹配,^[{|\(]?[0-9a-fA-F]{8}[-]?([0-9a-fA-F]{4}[-]?){3}[0-9a-fA-F]{12}[\)|}]?$ 匹配GUID的正則表達式。
完了,希望這篇POST對您有幫助。
Ⅶ sql 實現正則表達式
沒有正則表達式LIKE
確定給定的字元串是否與指定的模式匹配。模式可以包含常規字元和通配符字元。模式匹配過程中,常規字元必須與字元串中指定的字元完全匹配。然而,可使用字元串的任意片段匹配通配符。與使用 = 和 != 字元串比較運算符相比,使用通配符可使 LIKE 運算符更加靈活。如果任何參數都不屬於字元串數據類型,Microsoft® SQL Server™ 會將其轉換成字元串數據類型(如果可能)。
語法
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
參數
match_expression 任何字元串數據類型的有效 SQL Server 表達式。
patternmatch_expression 中的搜索模式,可以包含下列有效 SQL Server 通配符
1 % 包含零個或更多字元的任意字元串
示例:WHERE title LIKE '%computer% ' 將查找處於書名任意位置的包含單詞 computer 的所有書名。
2 _(下劃線) 任何單個字元
示例:WHERE au_fname LIKE '_ean ' 將查找以 ean 結尾的所有 4 個字母的名字(Dean、Sean 等)。
3 [] 指定范圍中的任何單個字元
示例:WHERE au_lname LIKE '[C-P]arsen ' 將查找以arsen 結尾且以介於 C 與 P 之間的任何單個字元開始的 作者姓氏,例如,Carsen、Larsen、Karsen 等
4 [^] 不屬於指定范圍中的任何單個字元,與 [] 相反
示例:WHERE au_lname LIKE 'de[^l]% ' 將查找以 de 開始且其後的字母不為 l 的所有作者的姓氏。
一 使用 like 的模式匹配:
在搜索Datetime類型時,建議使用like .
LIKE 支持 ASCII 模式匹配和 Unicode 模式匹配。當所有參數,包括 match_expression、pattern 和 escape_character(如果有)都是 ASCII 字元數據類型時,將執行 ASCII 模式匹配。如果其中任何參數屬於 Unicode 數據類型,則所有參數將被轉換為 Unicode 並執行 Unicode 模式匹配。當對 Unicode 數據(nchar 或 nvarchar 數據類型)使用 LIKE 時,尾隨空格是有意義的。但是對於非 Unicode 數據,尾隨空格沒有意義。Unicode LIKE 與 SQL-92 標准兼容。ASCII LIKE 與 SQL Server 的早期版本兼容
二 使用 % 通配符
例如,此查詢將顯示資料庫中所有的系統表,因為它們都以字母 sys 開始:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'sys% '
若要查閱非系統表的所有對象,請使用 NOT LIKE 'sys% '。如果共有 32 個對象且 LIKE 找到 13 個與模式匹配的名稱,則 NOT LIKE 將找到 19 個與 LIKE 模式不匹配的對象
三 使用escape字句的模式匹配
可搜索包含一個或多個特殊通配符的字元串。例如,customers 資料庫中的 discounts 表可能存儲含百分號 (%) 的折扣值。若要搜索作為字元而不是通配符的百分號,必須提供 ESCAPE 關鍵字和轉義符。例如,一個樣本資料庫包含名為 comment 的列,該列含文本 30%。若要搜索在 comment 列中的任何位置包含字元串 30% 的任何行,請指定由 WHERE comment LIKE '%30!%% ' ESCAPE '! ' 組成的 WHERE 子句。如果不指定 ESCAPE 和轉義符,SQL Server 將返回所有含字元串 30 的行。
下例使用 ESCAPE 子句和轉義符查找 mytbl2 表的 c1 列中的精確字元串 10-15%
USE pubs
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'mytbl2 ')
DROP TABLE mytbl2
GO
USE pubs
GO
CREATE TABLE mytbl2
(
c1 sysname
)
GO
INSERT mytbl2 VALUES ( 'Discount is 10-15% off ')
INSERT mytbl2 VALUES ( 'Discount is .10-.15 off ')
GO
SELECT c1
FROM mytbl2
WHERE c1 LIKE '%10-15!% off% ' ESCAPE '! '
GO
四 使用 [] 通配符
下例查找姓為 Carson、Carsen、Karson 或 Karsen 的作者所在的行。
USE pubs
SELECT au_lname, au_fname, phone
FROM authors
WHERE au_lname LIKE '[CK]ars[eo]n '
ORDER BY au_lname ASC, au_fname ASC