Я хотел бы преобразовать адрес (Line1, Line2, Line3, City, State, ZIP) в почтовый адрес (Addr1, Addr2, Addr3, Addr4), в котором нет пустых строк, а город, штат и ZIP объединены вместе на одной линии. Было бы неплохо иметь такую функцию.
т.е.
Line1 =
Line2 = 123 Где-то
Line3 =
Город = Детройт
State = MI
Почтовый индекс = 48000
Вот структура таблицы для входящего адреса:
IF OBJECT_ID('tempdb..#Employee') IS NOT NULL DROP TABLE #Employee
CREATE TABLE #Employee (Line1 VARCHAR(30), Line2 VARCHAR(30), Line3 VARCHAR(30),
City VARCHAR(17), State VARCHAR(2), ZIP VARCHAR(10))
GO
INSERT #Employee VALUES ('', '123 Somewhere', '', 'Detroit', 'MI', '48000')
SELECT * FROM #Employee
Полученный почтовый адрес
Addr1 = 123 Где-то
Addr2 = Детройт, штат Мичиган 48000
Addr3 =
Addr4 =
или одно поле с cr символ
Addr =
123 Где-то кр
Детройт МИ 48000 кр
кр
кр
Было бы неплохо, чтобы функция возвращала Addr1, Addr2, Addr3 и Addr4 или просто Addr с помощью.
SqueezeAddress (Line1, Line2, Line3, City, State, ZIP)
Тогда SqueezeAddress возвращает Addr1, Addr2, Addr3, Addr4
или
Адр с кр
Все строки Addr1-4 будут VARCHAR (40) или если используется одно поле Addr VARCHAR (200)
Согласно запросу Фила в комментариях ниже, здесь используется текущая логика (многие поля были удалены, чтобы было легче читать):
SELECT Line1, Line2, Line3,
ISNULL(LTRIM(RTRIM(ADDR.City)) + ', ','') + ISNULL(ADDR.RegionCode,'')
+ ' ' + ISNULL(ADDR.PostalCode,'') AS Line4,
UPDATE #tmpBilling
SET Line1 = Line2, Line2 = NULL
WHERE ISNULL(Line1, '') = ''
AND ISNULL(Line2, '') <> ''
UPDATE #tmpBilling
SET Line2 = Line3, Line3 = NULL
WHERE ISNULL(Line2, '') = ''
AND ISNULL(Line3, '') <> ''
UPDATE #tmpBilling
SET Line2 = Line4, Line4 = NULL
WHERE ISNULL(Line2, '') = ''
AND ISNULL(Line4, '') <> ''
UPDATE #tmpBilling
SET Line3 = Line4, Line4 = NULL
WHERE ISNULL(Line3, '') = ''
AND ISNULL(Line2, '') <> ''