2015-05-07 2 views
4

Это то, что я хотел бы ожидать:MySQL xpath оператор конкатенации, как добавить пробел?

mysql> select ExtractValue("<x><a>1</a><b>2</b></x>", "concat(/x/a, /x/b)"); 
+---------------------------------------------------------------+ 
| ExtractValue("<x><a>1</a><b>2</b></x>", "concat(/x/a, /x/b)") | 
+---------------------------------------------------------------+ 
| 12               | 
+---------------------------------------------------------------+ 
1 row in set (0.00 sec) 

Но почему это возвращение "1" вместо "1 2"?

mysql> select ExtractValue("<x><a>1</a><b>2</b></x>", "concat(/x/a, ' ', /x/b)"); 
+--------------------------------------------------------------------+ 
| ExtractValue("<x><a>1</a><b>2</b></x>", "concat(/x/a, ' ', /x/b)") | 
+--------------------------------------------------------------------+ 
| 1                 | 
+--------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

ответ

4

Это подтвержденная ошибка. Оператор конкатенации xpath MySQL учитывает только первые 2 параметра, когда он должен учитывать все параметры.

https://bugs.mysql.com/bug.php?id=71704

В качестве временного решения можно выбрать отдельные значения и передать их на регулярной concat функции:

select concat(ExtractValue("<x><a>1</a><b>2</b></x>", "/x/a"),' ', 
    ExtractValue("<x><a>1</a><b>2</b></x>", "/x/b")); 
3

Найдено лучшее временное решение:

mysql> select ExtractValue("<x><a>1</a><b>2</b></x>", "concat(/x/a, concat(' ', /x/b))"); 
+----------------------------------------------------------------------------+ 
| ExtractValue("<x><a>1</a><b>2</b></x>", "concat(/x/a, concat(' ', /x/b))") | 
+----------------------------------------------------------------------------+ 
| 1 2                  | 
+----------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 
Смежные вопросы