SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 10.02.2010 21:35:48

oleg410
Участник
Зарегистрирован: 10.02.2010
Сообщений: 5

строковые функции (разделение поля)

Есть таблица T1

                  ram                                  ID         
1014 Мб  (DDR2-800 DDR2 SDRAM)        81 
503 Мб  (DDR2-800 DDR2 SDRAM)             82
247 Мб  (DDR2-533 DDR2 SDRAM)             83

нужно значения поля ram скопировать в таблицу T2 но только значения типа
1014 Мб в один столбец ,а значения типа (DDR2-800 DDR2 SDRAM) в
другой. Смотрел строковые функции но чето не пошло.
Пока только учусь. Поделитесь идеями плиз.

Неактивен

 

#2 10.02.2010 22:59:30

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

Re: строковые функции (разделение поля)

Строковые функции - http://dev.mysql.com/doc/refman/5.0/en/ … tions.html

С помощью locate() определяете позицию открывающей скобки
С помощью substr() вырезаете подстроку - то что до открывающей скобки в первый столбец, остальное во второй

Неактивен

 

#3 10.02.2010 23:20:30

oleg410
Участник
Зарегистрирован: 10.02.2010
Сообщений: 5

Re: строковые функции (разделение поля)

vasya написал:

Строковые функции - http://dev.mysql.com/doc/refman/5.0/en/ … tions.html

С помощью locate() определяете позицию открывающей скобки
С помощью substr() вырезаете подстроку - то что до открывающей скобки в первый столбец, остальное во второй

Спасибо что откликнулись.
С  substr() я пробывал но затык у меня в том как в sql написать чтобы вырезать все что до первой скобки.
Я указвыал явно с 6-го символа но значения объема ОЗУ разные где-то 128 Mb а где-то 120000 Mb,
как написать чтобы скрипт автоматически это определял ?

Пробывал еще так
SELECT SUBSTRING(ram,(select LOCATE('(', ram)  from T1 )) from T1

выдает #1242 - Subquery returns more than 1 row

Отредактированно oleg410 (10.02.2010 23:42:59)

Неактивен

 

#4 10.02.2010 23:45:29

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

Re: строковые функции (разделение поля)

substr(ram,1,locate(' (',ram)) - вырежет то, что до открывающей скобки

Неактивен

 

#5 11.02.2010 10:13:15

oleg410
Участник
Зарегистрирован: 10.02.2010
Сообщений: 5

Re: строковые функции (разделение поля)

vasya написал:

substr(ram,1,locate(' (',ram)) - вырежет то, что до открывающей скобки

Супер, все пошло. Спасибо.

Отредактированно oleg410 (11.02.2010 20:56:15)

Неактивен

 

#6 11.02.2010 20:56:34

oleg410
Участник
Зарегистрирован: 10.02.2010
Сообщений: 5

Re: строковые функции (разделение поля)

OOPS ! Засада !
Оказывается в таблице есть записи где в поле ram есть данные без скобок типа ID 82
и после substr(ram,1,locate(' (',ram)) поле ram  в этих ячейках пустое.
Как поступить  в таком случае ?


ram                                                  ID         
1014 Мб  (DDR2-800 DDR2 SDRAM)        81
503 Мб                                             82
247 Мб  (DDR2-533 DDR2 SDRAM)          83

Неактивен

 

#7 11.02.2010 21:38:08

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

Re: строковые функции (разделение поля)

IF(LOCATE(), SUBSTR(), ram)

Неактивен

 

#8 11.02.2010 21:55:28

oleg410
Участник
Зарегистрирован: 10.02.2010
Сообщений: 5

Re: строковые функции (разделение поля)

paulus написал:

IF(LOCATE(), SUBSTR(), ram)

спасибо за подсказку, только что получилось через

select substring_index(ram,'(',1)  FROM T1

substring_index отрабатывает более коректно в моем случае
чем SUBSTR().

Неактивен

 

Board footer

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