1. 如何在sql server中使用正則表達式
大致步驟是:
1.下載他提供的那個壓縮包,裡面有源代碼和安裝腳本
2.將DLL復制到SQL
Server規定的目錄
3.運行INSTALL.sql這個腳本
大致使用的效果如下
SELECT
master.dbo.fn_pcre_match('[email protected]','^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$')
這句腳本的意思是,根據後面的正則表達式(一個email的規則)匹配前面的字元串.
如果返回1的話,表示匹配到了,否則返回0.
2. 在sql server 2005中建check約束的時候怎麼使用正則表達式來匹配某個欄位
check (電話號碼欄位 Like '[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') --手機號
3. 怎樣用SQL語句判斷某個欄位內容是否符合日期格式,那個正則表達式怎寫請高手幫幫忙。
正則表達式語法 一個正則表達式就是由普通字元(例如字元 a 到 z)以及特殊字元(稱為元字元)組成的文字模式。該模式描述在查找文字主體時待匹配的一個或多個字元串。正則表達式作為一個模板,將某個字元模式與所搜索的字元串進行匹配。 這里有...
4. 如何在SQL Server中使用正則表達式
sqlserver中,主要有regexp_like,regexp_replace,regexp_substr,regexp_instr四個正則表達式函數。
1、regexp_like:
regexp_like(x,pattern[,match_option]),查看x是否與pattern相匹配,該函數還可以提供一個可選的參數match_option字元串說明默認的匹配選項。match_option的取值如下:
'c'
說明在進行匹配時區分大小寫(預設值);
'i'
說明在進行匹配時不區分大小寫;
'n'
(.)點號能表示所有單個字元,包括換行(俺還不知道什麼地方有用到換行.只知道sql裡面可以用chr(10)表示換行、
'm'
字元串存在換行的時候當作多行處理.這樣$就可匹配每行的結尾.不然的話$只匹配字元串最後的位置、
示例:
select
*
from
emp
where
regexp_like(ename,'^a[a-z]*n$');
可以查找ename中以a開頭以n結尾的行.例如ename為arwen或arwin或anden.但Arwen不能被匹配.因為默認是區分大小寫.如果是
select
*
from
emp
where
regexp_like(ename,'^a[a-z]*n$','i')
則可以查找ename為Arwen的行記錄。
2、regexp_instr:
REGEXP_INSTR(x,pattern[,start[,occurrence[,return_option[,
match_option]]]])用於在x中查找pattern。返回pattern在x中出現的位置。匹配位置從1開始。可以參考字元串函數
INSTR(),參數相關:
'start'
開始查找的位置;
'occurrence'
說明應該返回第幾次出現pattern的位置;
'return_option'
說明應該返回什麼整數。若該參數為0,則說明要返回的整數是x中的一個字元的位置;若該參數為非0的整數,則說明要返回的整數為x中出現在pattern之後
的字元的位置;
'match_option'
修改默認的匹配設置.與regexp_like裡面的相同.
示例:
DECLARE
V_RESULT
INTEGER
;
BEGIN
SELECT
REGEXP_INSTR('hello
world','o',1,1,0)
INTO
V_RESULT
FROM
DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END;
結果為5,即字母o第一個次出現的位置。
如果regexp_instr('hello
world','o',1,1,n)其中n為除0之外的整數。比如1,3。則結果為6.表示第一次出現字母o的後面一個字元的位置。
如果regexp_instr('hello
world','o',1,2,0)則結果為9.表示第二次出現字母o的位置.
3、regexp_replace:
REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[,
match_option]]]])用於在x中查找pattern,並將其替換為replae_string。可以參考字元串函數
REPLACE(),參數同REGEXP_INSTR函數
示例:
DECLARE
V_RESULT
varchar2(90);
BEGIN
SELECT
REGEXP_REPLACE('hello
world','o','x',1,1)
INTO
V_RESULT
FROM
DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END;
結果為hellx
world.
如果REGEXP_REPLACE('hello
world','o','x'),則結果為hellx
wxrld.
如果
REGEXP_REPLACE('hello
world','o','x',1,2)則結果為hello
wxrld.
4、regexp_substr:
REGEXP_SUBSTR(x,pattern[,start[,occurrence[,
match_option]]])用於在x中查找pattern並返回。可以參考字元串函數
SUBSTR(),參數同REGEXP_INSTR函數.
例如:
DECLARE
V_RESULT
VARCHAR2(255);
BEGIN
SELECT
REGEXP_SUBSTR('hello
world','l{2}')
INTO
V_RESULT
FROM
DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END
;
結果為ll
查詢到匹配的字元串才返回匹配的字元.沒查到就返回空。
5. sqlserver 如何查詢某個欄位是以 字母開頭,數字結束的字元串。 正則怎麼寫謝謝
1> select PATINDEX( '[a-zA-Z]%[0-9]', 'IBM' )
2> go
-----------
0
(1 行受影響)
1> select PATINDEX( '[a-zA-Z]%[0-9]', 'Xbox360' )
2> go
-----------
1
(1 行受影響)
1> select PATINDEX( '[a-zA-Z]%[0-9]', '360' )
2> go
-----------
0
(1 行受影響)
6. sqlserver中正則表達式和分組查詢
使用vbscript 或者是frameword程序集向SqlServer資料庫中添加一個正則表達式函數,就可以滿足你的需求了嘛。
vbscript 函數(需要SqlServer運行環境中vbscript 庫)
CREATE function [dbo].[RegexMatchFirst]
(
@source ntext, --原字元串
@regexp varchar(1000), --正則表達式
@global bit = 1, --是否是全局替換
@ignoreCase bit = 0 --是否忽略大小寫
)
returnS varchar(1000) AS
begin
declare @hr integer
declare @objRegExp integer
declare @objMatch INT
declare @matchcount INT
declare @command varchar(50)
declare @result varchar(5000)
exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Global', @global
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OAMethod @objRegExp, 'execute', @objmatch OUTPUT, @source
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
EXEC @hr= sp_OAGetProperty @objmatch, 'count', @matchcount OUT
IF @hr <> 0 or @objmatch = 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
set @command = 'item(0).Value'
EXEC @hr= sp_OAGetProperty @objmatch, @command, @result OUT
exec @hr = sp_OADestroy @objRegExp
IF @hr <> 0 begin
return null
end
return @result
end
framework運行時程序集:
打開 Microsoft Visual Studio,創建一個sqlserver 資料庫資料庫項目,在項目中按照SqlServer方式創建一個正則表達式匹配函數,然後編譯部署到你的SqlServer資料庫中。
這個時候刷新資料庫的可編程性-->函數 --> 標量值函數就會看到你在Microsoft Visual Studio中創建的自定義函數了。
7. 在SQLserver中如何建立一個約束或觸發來驗證一個字元串中是否含有@字元
create trigger noat
on t_custom--表名
for insert --插入
as
begin tran --事務處理開始
select * from inserted where checknum like'%@%'
if @@rowcount>0 --如果存在@
begin
raiserror('插入的字元串中存在@',16,1)
rollback tran --回滾,不插入數據
return
end
else --如果不存在@
begin
commit tran --提交,插入資料庫
return
end
go
8. 在ms sql中如何使用正則表達式,請給出簡單示例,注釋越詳細越好!感激不盡
MSSQL不支持正則表達式,可以用CLR實現。
1、新建一個MSSQL的資料庫項目,配置到你的資料庫中
2、在資料庫項目中新建一個函數庫,編寫如下代碼:
///<summary>
///驗證是否符合正則表達式
///</summary>
[SqlFunction]
(stringinput,stringregex)
{
returnnewSqlBoolean(Regex.IsMatch(input,regex,RegexOptions.IgnoreCase));
}
然後在資料庫項目上點擊「右鍵」,選擇「部署」
PS:此功能需要MSSQL2005或者以上版本支持
如果你使用的是.NET3.5版本的話,需要在資料庫伺服器上安裝.netframework3.5
目前SQLSERVERCLR不支持.NET4.0,所以如果你使用VS2010開發的話需要把項目版本修改成為.NET2.0/3.5
使用方法:
SELECT*FROM[table]WHEREdbo.RegexIsMatch([ID],'^d+$')=1
9. sqlserver拆分長欄位。正則表達式
([\s\S]*?)(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2})
正則可以這樣寫
拆分的話 在代碼裡面做會方便一些吧