Вложенный порядок замены SQL - PullRequest
0 голосов
/ 03 октября 2018

Тупой вопрос, но не могу найти быстрый ответ ... Я создаю UDF, чтобы заменить префикс имени вложенной заменой ... что-то вроде этого:

REPLACE(
 REPLACE(
  REPLACE(
   REPLACE(
    REPLACE(
     REPLACE(
      REPLACE(
       REPLACE(
        @Name
       , 'Mr ', '')
      , 'Mrs ', '')
     , 'Ms ', '')
    , 'Dr ', '')
   , 'Mr. ', '')
  , 'Mrs. ', '')
 , 'Ms. ', '')
, 'Dr. ', '')

, но хочузамените те, которые содержат «.»ДО тех, кто без.Каков порядок / иерархия вложенных замен?ТИА, Дэнни

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Я предлагаю использовать такую ​​функцию в SQL:

CREATE FUNCTION [dbo].[ReplaceNamePrefix]
(@value NVARCHAR(50)
)
RETURNS NVARCHAR(50)
AS
     BEGIN
         DECLARE @RETURN NVARCHAR(50);
         SET @RETURN = @value;
         SET @RETURN = REPLACE(@RETURN, 'Mrs.', ''); 
         SET @RETURN = REPLACE(@RETURN, 'Mrs', '');
         SET @RETURN = REPLACE(@RETURN, 'Mr.', '');
         SET @RETURN = REPLACE(@RETURN, 'Mr', '');
         SET @RETURN = REPLACE(@RETURN, 'Ms.', '');
         SET @RETURN = REPLACE(@RETURN, 'Ms', ''); 
         SET @RETURN = REPLACE(@RETURN, 'Dr. ', '');
         SET @RETURN = REPLACE(@RETURN, 'Dr', ''); ');
         SET @RETURN = RTRIM(LTRIM(@RETURN));
         RETURN @RETURN;
     END;

Используйте следующую команду, чтобы получить цель:

SELECT [dbo].[ReplaceNamePrefix]('Dr. Danny Dennison');

результат: Дэнни Деннисон

enter image description here

Но если вы настаиваете на использовании собственного кода, используйте следующее:

SELECT REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( 'MR  Danny Dennison', 'Mrs.', '' ), 'Mrs', '' ), 'Mr.', '' ), 'Mr', '' ), 'Ms.', '' ), 'Ms', '' ), 'Dr. ', '' ), 'Dr', '' );
0 голосов
/ 03 октября 2018

Ваш самый внутренний Replace всегда будет запускаться первым в строке символов.Таким образом, от внутреннего к внешнему является порядок, в котором они будут выполнены.Хотя я предлагаю попробовать более элегантный подход, возможно, с помощью регулярных выражений и операторов case, чтобы его было проще поддерживать, чем просто иметь тонну вложенных замен, которые не обязательно все работают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...