Sql sorgu virgüller için regex Yardım

0 Cevap php

Ben gibi bir SQL sorgusu vardır:

select column1 as a, DECODE(x, 1, x1, 2, x2) as column2, 
    DECODE(y, 1, y1, 2, y2) as column3 from test

Ve ben (**,** ile gösterilir) aşağıdaki virgül seçmek istiyorum:

select a as column1 **,** DECODE(x, 1, x1, 2, x2) as column2 **,** 
    DECODE(y, 1, y1, 2, y2) as column3 from test

Bunun için /(?!(.*\))),|,(?=.*\()/gs kullanıyorum, ama nasıl DECODE çok seçilen ilk virgülle http://gskinner.com/RegExr/ görebilirsiniz. Ben bu kodu kullanılan benim seçin Çözümleme sütunlar için bu regex gerekir:

$select = substr($sql, 6, strpos($sql, "from") - 6);
$parts = preg_split('/(?!(.*\))),|,(?=.*\()/s', $select);

$columns = array();
foreach($parts as $p) {
    @list($id, $alias) = preg_split('/( as )/', $p);
    $columns[trim($id)] = trim($alias);
}

0 Cevap