SQL Eval Function Reqular Expressions
Definition
Use Regex flexibility to overcome "LIKE" and "PATINDEX" limitations. All Regex methods are also available such as;
- IsMatch
- Match
- Matches
- Replace
- Split
Find rows with invalid emails
DECLARE @regex VARCHAR(255) = '^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$' DECLARE @customer TABLE ( Email VARCHAR(255) ) INSERT INTO @customer VALUES ( 'info@zzzprojects.com' ), ( 'invalid.com' ), ( 'sales@zzzprojects.com' ) -- "Regex" is optional, you can directly use IsMatch DECLARE @valid_email SQLNET = SQLNET::New('Regex.IsMatch(email, pattern)') .ValueString('pattern', @regex).Root() -- SELECT 'invalid.com' SELECT * FROM @customer WHERE @valid_email.Val('email', Email).EvalBit() = 0
Find and insert in a table, all websites from a text
DECLARE @websites TABLE ( Website VARCHAR(250) ) DECLARE @regex VARCHAR(255) = '(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})' DECLARE @post VARCHAR(MAX) = 'zzz ... zzz... https://zzzprojects.com ... zzzz . zzz... https://github.com/zzzprojects/Eval-SQL.NET ... zzzz . zzz... zzz... https://github.com/zzzprojects/Eval-Expression.NET ... zzzz . zzz.... zzz.... zzz... https://github.com/zzzprojects/EntityFramework-Plus ... zzzz' -- "Regex" is optional, you can directly use Matches DECLARE @sqlnet SQLNET = SQLNET::New('Regex.Matches(input, pattern)') .ValueString('input', @post) .ValueString('pattern', @regex) -- INSERT result in table INSERT INTO @websites SELECT CAST(Value_1 AS VARCHAR(250)) FROM dbo.SQLNET_EvalTVF_1(@sqlnet) -- SELECT result -- 'https://zzzprojects.com' -- 'https://github.com/zzzprojects/Eval-SQL.NET' -- 'https://github.com/zzzprojects/Eval-Expression.NET' -- 'https://github.com/zzzprojects/EntityFramework-Plus' SELECT * FROM @websites