Удаление некоторых строк в конце поля в таблице SQL Server - PullRequest
0 голосов
/ 05 апреля 2019

В моей таблице SQL Server есть столбец с именем brn_description со следующими данными:

Minneapolis c0 02/14/18
Sacramento c0 02/14/18
Vancouver c0 02/14/18

Я хотел бы удалить все эти "c0 14/14/18". Это около 11 символов справа.

Как мне удалить их, пожалуйста, и просто вернуть

Minneapolis 
Sacramento 
Vancouver 

Ответы [ 6 ]

1 голос
/ 05 апреля 2019

вы можете использовать REPLACE, если ваша строка фиксирована

Declare @str Nvarchar(MAX) ='Minneapolis c0 02/14/18'
SELECT REPLACE(@str, 'c0 02/14/18', '');

демо

1 голос
/ 05 апреля 2019

попробуйте этот код: замените @str именем столбца

Declare @str Nvarchar(MAX) ='Minneapolis c0 02/14/18' SELECT left(@str,len(@str)-11)

0 голосов
/ 05 апреля 2019

Возможно, вы захотите удалить все после второго пробела справа (вы не можете использовать первое слева, если у вас есть, например, «Лос-Анджелес»).Найдите индекс этого пространства с charindex() на reverse() строки.Получив его, вы можете вычесть его из длины строки, полученной с помощью len(), и взять столько символов слева с помощью left() (длина одинакова, независимо от того, перевернута ли она или нет, поэтому это работает).

SELECT left(brn_description, len(brn_description) - charindex(' ', reverse(brn_description), charindex(' ', reverse(brn_description)) + 1))
       FROM (SELECT 'Minneapolis c0 02/14/18' brn_description
             UNION ALL
             SELECT 'Sacramento c0 02/14/18' brn_description
             UNION ALL
             SELECT 'Vancouver c0 02/14/18' brn_description
             UNION ALL
             SELECT 'Los Angeles c0 02/14/18' brn_description) x;
0 голосов
/ 05 апреля 2019

UPDATE brn_description SET column = LEFT(column, LEN(column) - 12)

ИЛИ в этом случае вы, вероятно, можете использовать CHARINDEX, так как пробел довольно очевиден

UPDATE brn_description SET column = LEFT(column, CHARINDEX(' ', column) - 1)

0 голосов
/ 05 апреля 2019

На всякий случай, если есть пробелы или CRLF и т. Д., Я бы предпочел найти c0 , а не обрезать последние 11 символов

Declare @S varchar(max) = 'Minneapolis c0 02/14/18'

Select left(@S,charindex(' c0 ',@S+' c0 ')-1)
0 голосов
/ 05 апреля 2019

Возможно, вы захотите:

update t
    set brn_description = left(brn_description, len(brn_description) - 11)
    where col like '% c0 [0-9][0-9]/[0-9][0-9]/[0-9][0-9]';

Это фактически меняет значение столбца, в котором появляется этот шаблон.

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