-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathSurname_Split.linq
157 lines (141 loc) · 5.71 KB
/
Surname_Split.linq
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<Query Kind="SQL" />
SET ANSI_NULLS ON;
go
SET QUOTED_IDENTIFIER ON;
go
--This function splits names.
CREATE FUNCTION [dbo].[Surname] (@Surnames VARCHAR(35), @ReturnPortion INT)
RETURNS VARCHAR(35)
AS
BEGIN
DECLARE @Return VARCHAR(35),
@part1 VARCHAR(35),
@part2 VARCHAR(35),
@part3 VARCHAR(35),
@part4 VARCHAR(35),
@isComplex INT = ( CHARINDEX(SPACE(1), TRIM(@Surnames), (
CHARINDEX(SPACE(1), TRIM(@Surnames), 1) ) + 1) ),
@isComplete INT = 0,
@p INT,
@t INT;
SET @Surnames = REPLACE(REPLACE(REPLACE(REPLACE(TRIM(@Surnames), SPACE(3),
SPACE(1))
, '.', SPACE(1)), SPACE(2),
SPACE(1)), SPACE(2), SPACE(1));
IF @isComplex = 0
BEGIN
SET @Return = (SELECT item
FROM dbo.Splitstring(@Surnames, SPACE(1))
WHERE rn = @ReturnPortion);
END;
ELSE
BEGIN
SET @p = 1;
WHILE @isComplete = 0
BEGIN
SET @part1 = (SELECT item
FROM dbo.Splitstring(@Surnames, SPACE(1))
WHERE rn = @p);
SET @part2 = (SELECT item
FROM dbo.Splitstring(@Surnames, SPACE(1))
WHERE rn = @p + 1);
IF LEN(@part1) = 2
AND LEN(@part2) = 2
BEGIN
SET @part4 = CONCAT(@part4, SPACE(1), @part1, SPACE(1), @part2);
SET @p = @p + 2;
END;
ELSE IF LEN(@part1) BETWEEN 1 AND 3
AND @p = 1
BEGIN
SET @part4 = CONCAT(@part4, SPACE(1), @part1);
SET @p = @p + 1;
END;
ELSE IF LEN(@part4) = 0
BEGIN
SET @part4 = @part1;
SET @p = @p + 1;
SET @isComplete = 1;
END;
ELSE
BEGIN
SET @part4 = CONCAT(@part4, SPACE(1), @part1);
SET @p = @p + 1;
SET @isComplete = 1;
END;
IF @part2 IN ( 'I', 'II', 'III', 'IV' )
BEGIN
SET @part4 = CONCAT(@part4, SPACE(1), @part2);
SET @p = @p + 1;
SET @isComplete = 1;
END;
ELSE IF LEN(@part2) = 1
BEGIN
SET @part4 = CONCAT(@part4, SPACE(1), @part2);
SET @p = @p + 1;
SET @isComplete = 1;
END;
END;
SET @Return = TRIM(@part4);
IF @ReturnPortion = 2
BEGIN
SET @t = @p;
SET @part1 = SPACE(0);
SET @part2 = SPACE(0);
SET @part3 = SPACE(0);
SET @part4 = SPACE(0);
SET @isComplete = 0;
WHILE @isComplete = 0
BEGIN
SET @part1 = (SELECT item
FROM dbo.Splitstring(@Surnames, SPACE(1))
WHERE rn = @p);
SET @part2 = (SELECT item
FROM dbo.Splitstring(@Surnames, SPACE(1))
WHERE rn = @p + 1);
IF LEN(@part1) = 2
AND LEN(@part2) = 2
BEGIN
SET @part4 = CONCAT(@part4, SPACE(1), @part1, SPACE(1),
@part2
);
SET @p = @p + 2;
END;
ELSE IF LEN(@part1) BETWEEN 1 AND 3
AND @t = @p
BEGIN
SET @part4 = CONCAT(@part4, SPACE(1), @part1);
SET @p = @p + 1;
END;
ELSE IF LEN(@part4) = 0
BEGIN
SET @part4 = @part1;
SET @p = @p + 1;
SET @isComplete = 1;
END;
ELSE
BEGIN
SET @part4 = CONCAT(@part4, SPACE(1), @part1);
SET @p = @p + 1;
SET @isComplete = 1;
END;
IF @part2 IN ( 'I', 'II', 'III', 'IV' )
BEGIN
SET @part4 = CONCAT(@part4, SPACE(1), @part2);
SET @p = @p + 1;
SET @isComplete = 1;
END;
ELSE IF LEN(@part2) = 1
BEGIN
SET @part4 = CONCAT(@part4, SPACE(1), @part2);
SET @p = @p + 1;
SET @isComplete = 1;
END;
IF @part2 != SPACE(0)
SET @isComplete = 0;
END;--end while
SET @Return = TRIM(@part4);
END;
END;
RETURN @Return;
END;