SQL для стандартизации почтовых индексов

#sql-server

#sql-сервер

Вопрос:

У меня есть таблица в SQL Server, в которой есть столбец PostalCode. Данные здесь не стандартизированы — иногда почтовый индекс отображается как H0H 0H0, а в других случаях это H0H0H0. Используя только SQL, как я могу гарантировать, что каждый из этих почтовых индексов стандартизирован как H0H 0H0?

Комментарии:

1. Какая разновидность SQL? MySQL? SQLServer? Oracle? SQLite? и т.д.?

2. @MPelletier, SQL Server.

3. Вы хотите, чтобы стандартный формат сохранялся в базе данных (чтобы значения в столбцах имели формат XXX XXX) или просто представлялись таким образом при запросе этих значений?

4. @MPelletier, это первая часть первого предложения вопроса. Теперь у него также есть sql-server тег, которого раньше не было.

5. @rdineiu: О, большое дело для меня! Спасибо! Я больше сосредоточился на остальной части вопроса. Кроме того, пример почтового индекса является специальным, зарезервированным для Санта-Клауса, думаю, это, должно быть, привело меня в восторг.

Ответ №1:

Ну, для начала, это действительно зависит от того, как это вводится в базу данных (т. Е. вы должны контролировать, как это вводится и управляется перед вставкой). Но для обновления вашей таблицы вы могли бы сделать это, чтобы привести их в правильный формат с пробелом между ними:

 Update MyTable Set PostalCode=SubStr(LTrim(PostalCode),0,3) || ' ' || SubStr(RTrim(PostalCode),-3,3);
  

Это может варьироваться в зависимости от фактического компонента database engine. На момент написания OP не указал, какой именно.

Комментарии:

1. Данные поступили не из формы ввода на нашей стороне, поэтому, к сожалению, мы не смогли контролировать формат. Спасибо за ваш ответ!

Ответ №2:

Если вы можете быть уверены, что это единственные два формата:

 select left(replace(post_code,' ',''),3)   right(replace(post_code,' ',''),3)
  

Если случай может отличаться, перенесите результат в UPPER()