MySql Использовать существующий столбец для создания и заполнения нового столбца. - PullRequest
0 голосов
/ 20 июля 2011

У меня есть таблица со значениями. Я пытаюсь создать новый столбец, значение строки которого будет зависеть от существующего столбца. Например, в приведенной ниже таблице, если подстрок столбца id из индекса 6 в индекс 7 больше 10, тогда значение нового столбца в этой строке должно быть подстрокой идентификатора в индексе 1-4 *. 1001 * дефис substr (id, 1, 4) +1. Иначе значение должно быть substr (id, 1, 4) -1 дефис substr (id, 1, 4).

id          New Column  Name
M20061012   2006-2007   Jude
K20070212   2006-2007   Anne
D20071214   2007-2008   John

Вот алгоритм для каждой строки таблицы:

if substr(id, 5, 1) < 10
   New Column value at that row = substr(id, 1, 4) - substr(id, 1, 4)+1
else
   New Column value at that row = substr(id, 1, 4)-1 - substr(id, 1, 4)

Любая помощь будет принята с благодарностью Спасибо

EDIT: Поэтому я попробовал это, как предложено @ scwagner

SELECT
id,
(CASE WHEN CONVERT(SUBSTR(id,6,2), SIGNED) < 10 
THEN CONCAT(CONVERT(SUBSTR(id, 2, 4),SIGNED)-1,'-',CONVERT(SUBSTR(id, 2, 4),SIGNED)) 
ELSE CONCAT(CONVERT(SUBSTR(id, 2, 4),SIGNED),'-',CONVERT(SUBSTR(id, 2, 4),SIGNED)+1)   END) AS `New Column`,
Name
FROM new

Где новый - имя таблицы. Но это возвращает столбец со всеми значениями строки = BLOB. Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 20 июля 2011

Вы можете проверить это на большем количестве данных, но это работало на MySQL 5.1.41-3ubuntu12.8 с предоставленными вами данными теста:

SELECT
  id,
  (CASE WHEN CONVERT(SUBSTR(id,6,2), SIGNED) < 10 THEN CONCAT(CONVERT(SUBSTR(id, 2, 4),SIGNED)-1,'-',CONVERT(SUBSTR(id, 2, 4),SIGNED)) ELSE CONCAT(CONVERT(SUBSTR(id, 2, 4),SIGNED),'-',CONVERT(SUBSTR(id, 2, 4),SIGNED)+1) END) AS `New Column`,
  Name
FROM
  <your table>
0 голосов
/ 20 июля 2011

Разобрался:

 SELECT
    id,
    (CASE WHEN CONVERT(SUBSTR(id,6,2), SIGNED) < 10 
    THEN CONCAT(CAST(CONVERT(SUBSTR(id, 2, 4),SIGNED)-1 AS CHAR),'-',CAST(CONVERT(SUBSTR(id, 2, 4),SIGNED) AS CHAR)) 
    ELSE CONCAT(CAST(CONVERT(SUBSTR(id, 2, 4),SIGNED) AS CHAR),'-',CAST(CONVERT(SUBSTR(id, 2, 4),SIGNED)+1) AS CHAR)   END) AS `New Column`,
    Name
    FROM new
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...