Разбить строку через запятую -> FUNCTION db.CHARINDEX не существует - PullRequest
18 голосов
/ 31 марта 2012

Мне нужно разбить строку через запятую на второй столбец У меня есть следующая таблица:

CL1     POS                 POS2     LENGHT     ALLELE
1       3015108,3015109              5          A
2       3015110,3015200              10         B
3       3015200,3015300              15         C
4       3015450,3015500              20         D
5       3015600,3015700              15         E

Я хочу разбить числа после запятой на второй столбец POS2 Так и должно быть

CL1     POS                 POS2     LENGHT     ALLELE
1       3015108             3015109  5          A
2       3015110             3015200  10         B
3       3015200             3015300  15         C
4       3015450             3015500  20         D
5       3015600             3015700  15         E

Итак, я запросил следующее:

INSERT INTO MyTable (POS2)
SELECT RIGHT(POS, CHARINDEX(',', POS) + 1 ) FROM MyTable ;


 It returns an error : 
 ERROR 1305 (42000): FUNCTION test.CHARINDEX does not exist

Ответы [ 2 ]

30 голосов
/ 31 марта 2012

MySQL не имеет встроенной функции CHARINDEX().LOCATE() будет эквивалентом MySQL.

Использование SUBSTRING_INDEX() может быть более кратким способом сделать это.Примерно так (заявление об отказе: не проверено):

SUBSTRING_INDEX(POS, ',', 1) для POS

SUBSTRING_INDEX(POS, ',', -1) для POS2


В сторону, я могу неправильно понять, что выпытаетесь выполнить, но, похоже, вы хотите UPDATE существующих строк, а не INSERT новых?Что-то вроде:

UPDATE MyTable SET POS2 = SUBSTRING_INDEX(POS, ',', -1);
UPDATE MyTable SET POS = SUBSTRING_INDEX(POS, ',', 1);
3 голосов
/ 17 июня 2012

MySQL имеет похожую функцию: InStr или для того же синтаксиса Locate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...