Advertisement
Guest User

udf_ExtractElementValueFromRawEDI

a guest
May 7th, 2025
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 1.37 KB | Source Code | 0 0
  1. CREATE FUNCTION dbo.udf_ExtractElementValueFromRawEDI (
  2.     @RawEDI         VARCHAR(MAX),
  3.     @Segment        VARCHAR(10),
  4.     @ElementNumber  INTEGER
  5. )
  6. RETURNS VARCHAR(MAX)
  7. AS
  8. BEGIN;
  9.     -- Note: This code only gets the first instance of a value!
  10.  
  11.  
  12.     -- Find the position of the segment
  13.     DECLARE @SegmentStart INT = CHARINDEX(@Segment + '*', @RawEDI);
  14.  
  15.     -- Find the position of the next newline after the segment
  16.     DECLARE @SegmentEnd INT = CHARINDEX(CHAR(10), @RawEDI, @SegmentStart);
  17.  
  18.     -- Extract the segment
  19.     DECLARE @SegmentText NVARCHAR(MAX);
  20.     IF @SegmentEnd = 0
  21.         SET @SegmentText = SUBSTRING(@RawEDI, @SegmentStart, LEN(@RawEDI) - @SegmentStart + 1)
  22.     ELSE
  23.         SET @SegmentText = SUBSTRING(@RawEDI, @SegmentStart, @SegmentEnd - @SegmentStart);
  24.  
  25.     -- Extract the desired element
  26.     DECLARE @ElementStart INT = 1;
  27.     DECLARE @ElementEnd INT;
  28.     DECLARE @CurrentElement INT = 0;
  29.  
  30.     WHILE @CurrentElement < @ElementNumber
  31.     BEGIN;
  32.         SET @ElementStart = CHARINDEX('*', @SegmentText, @ElementStart) + 1;
  33.         SET @ElementEnd = CHARINDEX('*', @SegmentText + '*', @ElementStart);
  34.         SET @CurrentElement = @CurrentElement + 1;
  35.     END;
  36.  
  37.     DECLARE @Element NVARCHAR(MAX);
  38.     IF @ElementEnd = 0
  39.         SET @Element = SUBSTRING(@SegmentText, @ElementStart, LEN(@SegmentText) - @ElementStart + 1)
  40.     ELSE
  41.         SET @Element = SUBSTRING(@SegmentText, @ElementStart, @ElementEnd - @ElementStart);
  42.  
  43.     RETURN @Element;
  44.  
  45. END;
  46.  
Tags: sql
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement