Я пытаюсь выяснить, как можно выбрать / найти и отформатировать каждый адрес электронной почты, содержащийся в куске текста.
Пример строки:
Notification: Organizer must notify at least 30 days prior to the event. Provide the event information, including: day of contact information, location, date, schedule, activities, etc. Paul T. Hall – paulhall@email.com - Mikel Zubizarreta – mikelzubizarreta@email.com
Вывод строки должен быть:
Notification: Organizer must notify at least 30 days prior to the event. Provide the event information, including: day of contact information, location, date, schedule, activities, etc. Paul T. Hall – <a href='mailto:paulhall@email.com'> - paulhall@email.com</a> - Mikel Zubizarreta – <a href='mailto:mikelzubizarreta@email.com'>mikelzubizarreta@email.com</a>
Вот попытки, которые я придумала:
Внутри выбора:
, CASE
WHEN CHARINDEX('@',CONDITION) > 0 THEN
REPLACE(CONDITION, dbo.FN_GET_EMAIL_FROM_STRING(CONDITION), '<a href=''mailto:' + dbo.FN_GET_EMAIL_FROM_STRING(CONDITION) + '''>' + dbo.FN_GET_EMAIL_FROM_STRING(CONDITION) + '</a>')
ELSE CONDITION
END [CONDITION]
Содержимое dbo.FN_GET_EMAIL_FROM_STRING (СОСТОЯНИЕ):
ALTER FUNCTION [dbo].[FN_GET_EMAIL_FROM_STRING]
(
@TextContainingEmail VARCHAR(1000)
)
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @retval VARCHAR(1000);
SELECT TOP
1 @retval = Items
FROM
dbo.FN_SPLIT_STRING(@TextContainingEmail, '')
WHERE
Items LIKE '%@%';
RETURN @retval;
END;
Содержимое: FN_SPLIT_STRING (@TextConistingEmail, '')
ALTER FUNCTION [dbo].[FN_SPLIT_STRING]
(
@STRING NVARCHAR(4000)
, @Delimiter CHAR(1)
)
RETURNS @Results TABLE(Items NVARCHAR(4000))
AS
BEGIN
DECLARE @INDEX INT;
DECLARE @SLICE NVARCHAR(4000);
-- HAVE TO SET TO 1 SO IT DOESNT EQUAL ZERO FIRST TIME IN LOOP
SELECT @INDEX = 1;
IF @STRING IS NULL
RETURN;
WHILE @INDEX != 0
BEGIN
-- GET THE INDEX OF THE FIRST OCCURENCE OF THE SPLIT CHARACTER
SELECT
@INDEX = CHARINDEX(@Delimiter, LTRIM(RTRIM(@STRING)));
-- NOW PUSH EVERYTHING TO THE LEFT OF IT INTO THE SLICE VARIABLE
IF @INDEX != 0
SELECT
@SLICE = LEFT(@STRING, @INDEX - 1);
ELSE
SELECT
@SLICE = @STRING;
-- PUT THE ITEM INTO THE RESULTS SET
INSERT INTO @Results
(
Items
)
VALUES(@SLICE);
-- CHOP THE ITEM REMOVED OFF THE MAIN STRING
SELECT
@STRING = REPLACE(RIGHT(@STRING, LEN(@STRING) - @INDEX), ',', '');
-- BREAK OUT IF WE ARE DONE
IF LEN(@STRING) = 0
BREAK;
END;
RETURN;
END;
Но вывод для строки, которую я использовал в качестве примера в верхней части этого поста, в конечном итоге выглядит следующим образом:
Notification: Organizer must notify at least 30 days prior to the event. Provide the event information, including: day of contact information, location, date, schedule, activities, etc. Paul T. Hall – <a href='mailto:paulhall@email.com'>paulhall@email.com</a> - Mikel Zubizarreta – mikelzubizarreta@email.com
Как вы можете видеть, это вроде работает, но это только реклама 'тег mailto на первый адрес электронной почты, а не на второй.