是否有为SQL Server 编写的SP
(不PATINDEX
,没有扩展LIKE
,纯xp_
)的正则表达式库?
(应该与共享主机一起使用)
编辑:
谢谢我知道sps
,SP
xp_ PATINDEX
CLR`解决方案
我也知道它不是最好的地方LIKE
,问题是理论:)
功能减少也被接受
Eric Z Beard.. 76
如何在PATINDEX函数?
TSQL中的模式匹配不是一个完整的正则表达式库,但它为您提供了基础知识.
(来自联机丛书)
Wildcard Meaning % Any string of zero or more characters. _ Any single character. [ ] Any single character within the specified range (for example, [a-f]) or set (for example, [abcdef]). [^] Any single character not within the specified range (for example, [^a - f]) or set (for example, [^abcdef]).
至少十年(SQL Server 2005+),`LIKE`支持`PATINDEX`所做的一切.之前不知道...... (6认同)
小智.. 18
如果有人有兴趣使用正则表达式与CLR这里是一个解决方案.如果模式匹配,则下面的函数(C#.net 4.5)返回1,如果模式不匹配则返回0.我用它来标记子查询中的行.SQLfunction属性告诉sql server此方法是SQL服务器将使用的实际UDF.将文件另存为dll,您可以从管理工作室访问该文件.
// default using statements above
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text.RegularExpressions;
namespace CLR_Functions
{
public class myFunctions
{
[SqlFunction]
public static SqlInt16 RegexContain(SqlString text, SqlString pattern)
{
SqlInt16 returnVal = 0;
try
{
string myText = text.ToString();
string myPattern = pattern.ToString();
MatchCollection mc = Regex.Matches(myText, myPattern);
if (mc.Count > 0)
{
returnVal = 1;
}
}
catch
{
returnVal = 0;
}
return returnVal;
}
}
}
在管理工作室中,通过可编程性 - 程序集 - 新程序集导入dll文件
然后运行此查询:
CREATE FUNCTION RegexContain(@text NVARCHAR(50), @pattern NVARCHAR(50))
RETURNS smallint
AS
EXTERNAL NAME CLR_Functions.[CLR_Functions.myFunctions].RegexContain
然后,您应该通过存储程序集的数据库完全访问该功能.
然后在如下的查询中使用:
SELECT *
FROM
(
SELECT
DailyLog.Date,
DailyLog.Researcher,
DailyLog.team,
DailyLog.field,
DailyLog.EntityID,
DailyLog.[From],
DailyLog.[To],
dbo.RegexContain(Researcher, '[\p{L}\s]+') as 'is null values'
FROM [DailyOps].[dbo].[DailyLog]
) AS a
WHERE a.[is null values] = 0
Steven Muraw.. 14
通过使用LIKE可以获得一些基本模式匹配,其中%匹配任何数字和字符组合,_匹配任何一个字符,[abc]可以匹配a,b或c ... MSDN网站上有更多信息.
如何在PATINDEX函数?
TSQL中的模式匹配不是一个完整的正则表达式库,但它为您提供了基础知识.
(来自联机丛书)
Wildcard Meaning % Any string of zero or more characters. _ Any single character. [ ] Any single character within the specified range (for example, [a-f]) or set (for example, [abcdef]). [^] Any single character not within the specified range (for example, [^a - f]) or set (for example, [^abcdef]).
如果有人有兴趣使用正则表达式与CLR这里是一个解决方案.如果模式匹配,则下面的函数(C#.net 4.5)返回1,如果模式不匹配则返回0.我用它来标记子查询中的行.SQLfunction属性告诉sql server此方法是SQL服务器将使用的实际UDF.将文件另存为dll,您可以从管理工作室访问该文件.
// default using statements above
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text.RegularExpressions;
namespace CLR_Functions
{
public class myFunctions
{
[SqlFunction]
public static SqlInt16 RegexContain(SqlString text, SqlString pattern)
{
SqlInt16 returnVal = 0;
try
{
string myText = text.ToString();
string myPattern = pattern.ToString();
MatchCollection mc = Regex.Matches(myText, myPattern);
if (mc.Count > 0)
{
returnVal = 1;
}
}
catch
{
returnVal = 0;
}
return returnVal;
}
}
}
在管理工作室中,通过可编程性 - 程序集 - 新程序集导入dll文件
然后运行此查询:
CREATE FUNCTION RegexContain(@text NVARCHAR(50), @pattern NVARCHAR(50))
RETURNS smallint
AS
EXTERNAL NAME CLR_Functions.[CLR_Functions.myFunctions].RegexContain
然后,您应该通过存储程序集的数据库完全访问该功能.
然后在如下的查询中使用:
SELECT *
FROM
(
SELECT
DailyLog.Date,
DailyLog.Researcher,
DailyLog.team,
DailyLog.field,
DailyLog.EntityID,
DailyLog.[From],
DailyLog.[To],
dbo.RegexContain(Researcher, '[\p{L}\s]+') as 'is null values'
FROM [DailyOps].[dbo].[DailyLog]
) AS a
WHERE a.[is null values] = 0
通过使用LIKE可以获得一些基本模式匹配,其中%匹配任何数字和字符组合,_匹配任何一个字符,[abc]可以匹配a,b或c ... MSDN网站上有更多信息.