SQL как обрезать строку - PullRequest
3 голосов
/ 30 июля 2010

У меня есть столбец строк с городом, штатом и номером в каждом.

SPOKANE, WA           232/107
LAS VEGAS, NV         232/117
PORTLAND, OR          232/128

Существует гораздо больше, чем просто это, но мне интересно, как я мог бы обрезать числа в этом столбце и просто показать город и штат или даже лучше - обрезать цифры и сделать город и штат отдельным столбцом .

Все столбцы имеют одинаковый формат для всех разных записей.

Спасибо!

Ответы [ 6 ]

7 голосов
/ 30 июля 2010

Не выполняя всю работу за вас ...

Город: подстрока столбца с позиции 0, до первого появления запятой - 1.
Состояние: подстрокастолбец с 2 позиций после первого вхождения запятой, до следующей позиции, которая является пробелом ... обрезается.

см: SUBSTRING(), CHARINDEX(), PATINDEX()

2 голосов
/ 30 июля 2010

Я уже понял это и написал SQL ... затем я увидел ответ Fosco , но, так как он у меня есть, я мог бы в любом случае опубликовать его:

SELECT
    LEFT(yourcolumn, CHARINDEX(',', yourcolumn) - 1) AS City,
    RIGHT(LEFT(yourcolumn, CHARINDEX(',', yourcolumn) + 3), 2) AS State
FROM yourtable

Разница между этим алгоритмом и алгоритмом Фоско состоит в том, что это предполагает, что состояние ровно 2 буквы. Если это не всегда так, используйте другой ответ.

2 голосов
/ 30 июля 2010

Для удаления чисел в конце используйте метод подстроки, что-то вроде этого.

@str = SUBSTRING(@str, LEN(@str)-7, 7)

Для разделения города и штата вам понадобится какая-то функция разделения, но я не могу вспомнить синтаксиспрости мне голову.

0 голосов
/ 01 августа 2010

Рассмотрите возможность использования функции REVERSE.Если вы перевернете строку, то позиция первого пробела в перевернутой строке может быть вычтена из длины нормальной строки, чтобы вычислить начальную позицию NNN / MMM.

Метод хорошо сработал для менядля разбора путей к файлам.Обращение строки и поиск первого «\» в обращенной строке указывает, где заканчивается путь и начинается имя файла.

Если ваши данные отформатированы так же хорошо, как вы указали, этот метод может быть более сложным, чемнекоторые другие.Но когда начальные данные «случайные», этот метод действительно может упростить вещи.

0 голосов
/ 31 июля 2010

Я думаю, что это сломает ваше поле всеми способами, предложенными до сих пор ...

SELECT
   substring([field], 1, patindex('%[1-9]%', [field])-1) as [CITY_AND_STATE],
   substring([field], 1, charindex(',', [field])-1) as [CITY_ONLY],
   substring([field], charindex(',', [field]), patindex('%[1-9]%', [field])-1)) as [STATE_ONLY],
   substring([field], patindex('%[1-9]%', [field]), len([field])) as [NUMBERS_ONLY]
FROM
   [table]
0 голосов
/ 30 июля 2010

РЕДАКТИРОВАТЬ Упс.Просто увидел, что вопрос в том, как, а не если нужно.Я думаю, это то, что я получаю.

Другие ответы здесь относятся к подстроке (), поэтому я оставлю эту часть вашего вопроса в покое.

Что касается разбиения их на другиестолбец: если xxx / yyy не имеет прямой связи с городом и штатом, то я бы определенно переместил их в другой столбец.Действительно, у меня было бы по крайней мере три столбца: Город, Штат, [Wh whatYouCallThatCode]

Продолжение РЕДАКТИРОВАНИЕ Если они всегда будут справа от вашего столбца, как насчет Right(7, [Column])

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