Запрос на удаление конечного или начального пробела из середины строки с помощью сервера SQL - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть столбец с данными, приведенными ниже -
BEFORE

Я хочу удалить любой [пробел] до и после первого экземпляра '-'символ в данных, чтобы я мог получить следующие очищенные данные -

AFTER

Как записать это как SQL-запрос?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Вот еще один вариант для вас.

Это предполагает следующее:

  • Удаляйте ссуду или конечный пробел только вокруг первого экземпляра '-', все остальные должныбыть сохраненным.
  • Только 1 и только 1 начальный или конечный пробел.
  • Возможно, уже "очищены" данные.

Попробуйте это сделать:

DECLARE @TestData TABLE
    (
        [StringData] NVARCHAR(100)
    );


INSERT INTO @TestData (
                          [StringData]
                      )
VALUES ( 'ADFADSF- ASDFSADF - Q343243498' )
     , ( 'ABC - EFSSADF - 2345234532' )
     , ( 'EFGSADFSA -ASDFSADF - 2342345234' )
     , ( 'ASDF34 - ASDLFASDJF - 234234 - 34324' )
     , ( 'ABC-123 - 465 - 685' );

SELECT *
     , STUFF([StringData]
              , CHARINDEX('-', [StringData]) - 1
              , 3
              , REPLACE(SUBSTRING([StringData], CHARINDEX('-', [StringData]) - 1, 3), ' ', '')
            ) AS [CleanStringData]
FROM   @TestData;

В основном, это то, что делает полосу от 1 до '-' до одного после, заменяя его тем же символом, но удаляя пробелы, если они существуют.

0 голосов
/ 16 ноября 2018

Попробуйте это

CREATE TABLE Spaces(
  Value VARCHAR(45)
);

INSERT INTO Spaces VALUES
('B2555 - 30...'),
('Babc30 - 40 ...'),
('B5- 50..'),
('B6AfG066ML -60..');


SELECT CASE WHEN CHARINDEX(' -', Value) > 0 THEN
            STUFF(Value, CHARINDEX(' -', Value), 1, '')
            ELSE
            Value
            End Result
FROM
    (
      SELECT CASE WHEN CHARINDEX('- ', Value) > 0 THEN
                  STUFF(Value, CHARINDEX('- ', Value) + 1, 1, '')
                  ELSE
                  Value
                  End Value
      FROM
          (
            SELECT CASE WHEN CHARINDEX(' - ', Value) > 0 THEN
                        STUFF(Value, CHARINDEX(' - ', Value), 1, '')
                        ELSE
                        Value
                        End Value
            FROM Spaces
          ) T1
    ) T2;

Возвращает:

+------------------------+
|         Result         |
+------------------------+
| B2555-30- ABC - ABC... |
| Babc30-40 ...          |
| B5-50..                |
| B6AfG066ML-60..        |
+------------------------+

Демо

...