Mam taką tabelę:
-- mytable
+----+------------+
| id | value |
+----+------------+
| 1 | one,ten |
| 2 | nine,two |
| 3 | five, one |
+----+------------+
Wartość value
kolumna jest zawsze wykonana z dwóch części, które są połączone ,
. Teraz chcę je zaznaczyć w dwóch oddzielnych kolumnach:
-- expected result:
+----+-------+------+
| id | val1 | val2 |
+----+-------+------+
| 1 | one | ten |
| 2 | nine | two |
| 3 | five | one |
+----+-------+------+
Jak mogę to zrobić?
Mogę to zrobić przez PHP w następujący sposób:
-- query
SELECT id, value FROM mytable
-- then
$vals = explode(",", $rows["value"]);
foreach($vals as $val){
//do stuff
}
Ale chcę wiedzieć, czy można to zrobić w mysql?
Odpowiedzi:
1 dla odpowiedzi № 1W tym celu możesz użyć funkcji INSTR()
znaleźć pozycję przecinka, a następnie użyć LEFT()
i RIGHT()
aby podzielić je na dwie potrzebne kolumny, jak poniżej:
SELECT id
,LEFT(value,INSTR(value,",")-1) AS val1
,RIGHT(value,CHAR_LENGTH(value)-INSTR(value,",")-1) AS val2
FROM mytable
0 dla odpowiedzi nr 2
Można to zrobić za pomocą SUBSTRING_INDEX(string,delimiter,count)
lubię to:
SELECT id,
SUBSTRING_INDEX(value,",", 1) as val1,
SUBSTRING_INDEX(value,",", -1) as val2
FROM mytable