I created a customisation recently for a client which would generate a Vendor ID based on the name, by removing alphanumeric characters. In order to make it as flexible as possible, I created the function to accept a parameter for type which will cause the function to strip different characters:
- A – leaves alpha characters only.
- N – leaves numeric characters only.
- AN – leaves alphanumeric characters.
The second parameter is the string which should have the characters stripped:
IF OBJECT_ID (N'uv_AZRCRV_StripCharacters', N'FN') IS NOT NULL
DROP FUNCTION uv_AZRCRV_StripCharacters
GO
CREATE FUNCTION uv_AZRCRV_StripCharacters(@Type VARCHAR(100), @String VARCHAR(MAX))
RETURNS VARCHAR(MAX)
/*
Created by Ian Grieve of azurecurve|Ramblings of a Dynamics GP Consultant (https://www.azurecurve.co.uk)
This code is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0 Int).
*/
BEGIN
DECLARE @PatIndex VARCHAR(20)
IF (@Type = 'Alpha' OR @Type = 'A')
SET @PatIndex = '%[^a-z]%'
IF (@Type = 'Numeric' OR @Type = 'N')
SET @PatIndex = '%[^0-9]%'
IF (@Type = 'AlphaNumeric' OR @Type = 'AN')
SET @PatIndex = '%[^a-z0-9]%'
WHILE PATINDEX(@PatIndex, @String) < 0
SET @String = STUFF(@String, PATINDEX(@PatIndex, @String), 1, '')
RETURN @String
END
GRANT EXECUTE ON uv_AZRCRV_StripCharacters TO DYNGRP
GO
What should we write about next?
If there is a topic which fits the typical ones of this site, which you would like to see me write about, please use the form, below, to submit your idea.
Handy function, but note that “WHILE PATINDEX(@PatIndex, @String) 0”