程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> T-SQL中應用正則表達式函數

T-SQL中應用正則表達式函數

編輯:MSSQL

T-SQL中應用正則表達式函數。本站提示廣大學習愛好者:(T-SQL中應用正則表達式函數)文章只能為提供參考,不一定能成為您想要的結果。以下是T-SQL中應用正則表達式函數正文


起首,我們在VSTS中創立一Database Project,增一個class, 完成上面的一個辦法:

/// <summary>
/// Regs the ex match.
/// </summary>
/// <param name="inputValue">The input value.</param>
/// <param name="regexPattern">The regex pattern.</param>
/// <remarks>Author: Petter Liu http://wintersun.cnblogs.com </remarks>
/// <returns>1 match,0 not match</returns>
[SqlFunction]
public static bool RegExMatch(string inputValue, string regexPattern)
{
// Any nulls - we can't match, return false
if (string.IsNullOrEmpty(inputValue) || string.IsNullOrEmpty(regexPattern))
return false;

Regex r1 = new Regex(regexPattern.TrimEnd(null));
return r1.Match(inputValue.TrimEnd(null)).Success;
}

好了,Build後Deploy到你的Target database就OK了,VisualStudio會主動注冊這個法式集的。假如,你想手動注冊法式集,可履行以下的T-SQL:

CREATE ASSEMBLY [RegExCLR] FROM 'RegExCLR.dll';

-- Add the REGEX function. We want a friendly name
-- RegExMatch rather than the full namespace name.
-- Note the way we have to specify the Assembly.Namespace.Class.Function
-- NOTE the RegExCLR.RegExCLR
-- (one is the assembly the other is the namespace)
CREATE FUNCTION RegExMatch ( @inputCalue NVARCHAR(4000),
@regexPattern NVARCHAR(4000) ) RETURNS BIT
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對您有贊助。

您能夠對以下POST感興致:

SQLSERVER2008中CTE的Split與CLR的機能比擬

SQLSERVER應用CLR Stored Procedure導出數據到Excel /www.cnblogs.com/liujuncm5/archive/2009/08/31/1557569.html

3.在存儲進程外面,寫SQL語句不克不及靜態不加order by 功效

好比


--·@new_orderby 是傳入參數,不克不及如許寫
select top (10*(2-1)) item_uid from testim order by @new_orderby


--履行這個的時刻,SQL會湧現 The SELECT item identified by the ORDER BY number 1 contains a variable as part
of the expression identifying a column position. Variables are only allowed when
ordering by an expression referencing a column name.

不外我找到處理方法,不外很費事,

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=9328   (第二個答復用 ' sql '停止銜接)

http://databases.aspfaq.com/database/how-do-i-use-a-variable-in-an-order-by-clause.html  (用case end 也行)

4. select into 和 insert into select 兩種復制詞句  (這裡感激http://www.cnblogs.com/freshman0216/archive/2008/08/15/1268316.html)

  1.INSERT INTO SELECT語句

      語句情勢為:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

       請求目的表Table2必需存在,因為目的表Table2曾經存在,所以我們除拔出源表Table1的字段外,還可以拔出常量。

   2.SELECT INTO FROM語句

      語句情勢為:SELECT vale1, value2 into Table2 from Table1

       請求目的表Table2不存在,由於在拔出時會主動創立表Table2,並將Table1中指定字段數據復制到Table2中。

5.趁便溫習下經常使用的SQL辦法語句

declare @name varchar(200) --聲明變量
set @name='abcd;def' --賦值
print 'exec len :'+Convert(varchar(10),Len(@name)) --convert(type,value)轉換,Len(value)獲得年夜小
print 'exec charindex:'+Convert(varchar(10),CharIndex('e',@name))--CharIndex(find,value) 在value中查找find的地位
print 'not replace:'+@name
print 'exec replace:'+WordStr(@name,';','') --用replace調換
print 'exec substring:'+Substring(@name,0,3)--用substring截取
print @@RowCount --前往上一行代碼受影響的行數

作者:chenhuzi

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved