Это, как я обратился к нему. Я надеюсь, это поможет.
Создание базы данных TestDB перейти
USE TestDB GO --create Sample Таблица CustomerAddress создать таблицу CustomerAddress (Адрес полукокса (100)) пойти
вставки в значения CustomerAddress ('123 Main St ') Вставить в значения CustomerAddress (' XYZ St ') Вставить в значения CustomerAddress (' abc ')
выбрать * из Custome rAddress
--option # 1a - Сплит Адрес колонки, когда нет номер улицы замените пустое значение ВЫБРАТЬ
street_number = случай, когда (ISNUMERIC (ЛЕВЫЙ (Адрес, 1)) = 1), то ЛЕВЫЙ (адрес, CHARINDEX ('', Address)) ELSE '' END, Street_Name = CASE WHEN (ISNUMERIC (LEFT (Адрес, 1)) = 1) THEN подстрока (адрес, CHARINDEX ('', Address) + 1, len (Адрес) - (CHARINDEX ('', Address) - 1)) ELSE Адрес END FROM [dbo] .CustomerAddress;
--option # 1b - Сплит Адрес колонки, когда нет номер улицы не заменить NULL ВЫБРАТЬ
street_number = случай, когда (ISNUMERIC (ЛЕВЫЙ (Адрес, 1)) = 1) THEN ЛЕВЫЙ (Адрес, CHARINDEX ('', Address)) ELSE NULL END, Street_Name = CASE WHEN (ISNUMERIC (LEFT (Адрес, 1)) = 1) THEN substring (Адрес, CHARINDEX ('', Address) + 1, len (Address) - (CHARINDEX ('', Address) - 1)) ELSE Адрес END FROM [dbo] .CustomerAddress;
--option # 2a - Использование LIKE% вместо ISNUMERIC, мы можем получить более высокую производительность
ВЫБРАТЬ
street_number = случай, когда (адрес LIKE '[0-9]%') ТОГДА LEFT (Адрес, CHARINDEX (' ' адрес)) ИНАЧЕ NULL КОНЕЦ ,
STREET_NAME = случай, когда (Адрес LIKE '[0-9]%') ТОГДА подстроку (адрес, CHARINDEX ('', Адрес) + 1, LEN (Адрес) - (CHARINDEX ('', Address) - 1)) ELSE Адрес END FROM [dbo].CustomerAddress;
--clean вверх, понижая таблицу падения таблицы [DBO] .CustomerAddress пойти
Я получаю столбец адреса из отдельной таблицы, а затем использовать код разделить на количество и название улиц колонны и магазин эти два столбца в другой таблице –