sqlserver正則
① sql用正則表達式查詢ip前兩個欄位
instr是oracle裡面的
sqlserver裡面可以這樣來查詢第二次出現的情況
charindex('.', ip, charindex('.', ip)+1)
整個來寫就是這樣,substring(ip,1,charindex('.', ip, charindex('.', ip)+1)-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.
③ 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 行受影響)
④ sql server2012中有沒有正則表達式類似的函數或者類似的實現方式
這樣行不 中間哪個正則我是在網上隨便找的具體這個正則對不對我也不知道
⑤ sql server中可以用正則表達式嗎
SQLSERVER 2005已經可以支持正則表達式(通過外部用CLR語言(C# .NET、VB.NET)編寫過程、觸發器和函數),但是SQL2000不支持,如果一定要用,可以用調用VB的正則表達式控制項。
⑥ 在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
⑦ 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中創建的自定義函數了。
⑧ 如何在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
查詢到匹配的字元串才返回匹配的字元.沒查到就返回空。
⑨ sqlserver拆分長欄位。正則表達式
([\s\S]*?)(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2})
正則可以這樣寫
拆分的話
在代碼裡面做會方便一些吧
⑩ 用sqlserver建立一張表,如何利用正則表達式查詢
Sql server不支持正則,如果是Sql2005以上的版本,可以用Dotnet的託管代碼來實現,參考:
http://www.cnblogs.com/chenxizhang/archive/2011/05/27/2060319.html