SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.02.2010 21:46:41

Артём Н.
Активист
Зарегистрирован: 03.11.2009
Сообщений: 156

Как убрать лишние разделители?

Есть запрос, типа:

Код:

select *,
CONCAT_WS(" ", client.surname, client.name, client.middlename)
as FULL_NAME,
CONCAT_WS(", ", client.country, client.region, client.town, client.street, client.home, client.korpus, client.flat) as FULL_ADDRESS
from client
where :client_id = ID_CLIENT
order by FULL_NAME;

После его выполнения FULL_ADDRESS получается подобен следующему:
", , Город, улица, дом, , ,"
Возможно ли как-то избавиться от мешающих разделителей, изменив запрос?


"И ни птица, ни ива слезы не прольет,
Если сгинет с земли человеческий род.
И весна, и весна встретит новый рассвет,
Не заметив, что нас уже нет..."

Неактивен

 

#2 17.02.2010 22:08:52

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5847

Re: Как убрать лишние разделители?

CONCAT_WS(", ", if(client.country='',null,client.country), ...) as FULL_ADDRESS

Неактивен

 

#3 17.02.2010 22:24:19

Артём Н.
Активист
Зарегистрирован: 03.11.2009
Сообщений: 156

Re: Как убрать лишние разделители?

И так для каждого поля?
У меня не один такой запрос, я потом запутаюсь...
А есть способы, без явного использования таких проверок?


"И ни птица, ни ива слезы не прольет,
Если сгинет с земли человеческий род.
И весна, и весна встретит новый рассвет,
Не заметив, что нас уже нет..."

Неактивен

 

#4 17.02.2010 22:50:37

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как убрать лишние разделители?

Можете в получившейся строке заменить все вхождения «, » на пустую строку
с помощью REPLACE, например.

Неактивен

 

#5 18.02.2010 00:23:00

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5847

Re: Как убрать лишние разделители?

To paulus: Не получиться, ведь тогда между городом и улицей и домом не будет запятой тоже, что не есть правильно.

To Артём Н.: А в чем именно запутаетесь? Просто для всех полей, входящих в concat_ws() вместо имени поля вы пишите if(`имя поля`='',null,`имя поля`)

Неактивен

 

#6 18.02.2010 11:02:23

Артём Н.
Активист
Зарегистрирован: 03.11.2009
Сообщений: 156

Re: Как убрать лишние разделители?

paulus написал:

Можете в получившейся строке заменить все вхождения «, » на пустую строку
с помощью REPLACE, например.

Тогда разделителей вообще не будет, как vasya заметил...

vasya написал:

To Артём Н.: А в чем именно запутаетесь?

Много запросов и не так мало полей объединяются. Будет нагромождение if().
В принципе, это лучше, чем убирать повторные разделители с помощью "внешней" функции.

Спасибо.

Но, если есть способ без if, интересно его узнать.


"И ни птица, ни ива слезы не прольет,
Если сгинет с земли человеческий род.
И весна, и весна встретит новый рассвет,
Не заметив, что нас уже нет..."

Неактивен

 

#7 18.02.2010 11:20:40

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5847

Re: Как убрать лишние разделители?

Хранить в базе не пустые строки, а null значения wink

Неактивен

 

#8 18.02.2010 12:50:24

Артём Н.
Активист
Зарегистрирован: 03.11.2009
Сообщений: 156

Re: Как убрать лишние разделители?

smile Поздно уже. База есть. Не моя.
Мне, наверное, придётся её структуру немного поменять, но пустые строки на NULL заменять, наверное, не буду.
Функцию бы какую-то, чтобы в неё упрятать "сборку адреса". roll
Запросы, чтобы выглядели попроще.


"И ни птица, ни ива слезы не прольет,
Если сгинет с земли человеческий род.
И весна, и весна встретит новый рассвет,
Не заметив, что нас уже нет..."

Неактивен

 

#9 18.02.2010 20:46:12

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как убрать лишние разделители?

Честно говоря, не понял, что Вам не нравится в REPLACE. Если не нравится, что
пропадут все запятые — меняйте ДВЕ запятые подряд на одну. И все запятые в
начале и конце строки.

Неактивен

 

#10 18.02.2010 21:46:26

Артём Н.
Активист
Зарегистрирован: 03.11.2009
Сообщений: 156

Re: Как убрать лишние разделители?

Я уж переделал с if().

меняйте ДВЕ запятые подряд на одну.

Ради интереса. Как поведёт себя REPLACE, в случае трёх запятых подряд? В этом случае, останется две запятых?


"И ни птица, ни ива слезы не прольет,
Если сгинет с земли человеческий род.
И весна, и весна встретит новый рассвет,
Не заметив, что нас уже нет..."

Неактивен

 

#11 19.02.2010 00:14:42

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как убрать лишние разделители?

Да, действительно sad

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson