#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()