2

クエリを分解する方法はありますか? 私のクエリは次のようになります。

SELECT C18_NLE00102.DETAIL
,C18_NLE00102.LIB_STATUS
,CLIENT_NLE00103.SIZO_CAMPAIGN_ID__C
,DATEPART( week,C18_NLE00102.DATE) as Week
,DATEPART( year,C18_NLE00102.DATE) as Year
 FROM 
C18_NLE001 C18_NLE00102 INNER JOIN CLIENT_NLE001 CLIENT_NLE00103
 ON C18_NLE00102.INDICE = CLIENT_NLE00103.INDICE

次のような出力が必要です。

Array (
    [0] => SELECT C18_NLE00102.DETAIL 
    [1] => C18_NLE00102.LIB_STATUS 
    [2] => CLIENT_NLE00103.SIZO_CAMPAIGN_ID__C 
    [3] => DATEPART(week,C18_NLE00102.DATE) as Week
    [4] => DATEPART( year,C18_NLE00102.DATE) as Year  
    [5] => FROM C18_NLE001 C18_NLE00102 INNER JOIN CLIENT_NLE001 CLIENT_NLE00103 ON C18_NLE00102.INDICE = CLIENT_NLE00103.INDICE
)

私の出力は次のとおりです。

Array (
    [0] => SELECT C18_NLE00102.DETAIL 
    [1] => C18_NLE00102.LIB_STATUS 
    [2] => CLIENT_NLE00103.SIZO_CAMPAIGN_ID__C 
    [3] => DATEPART( week 
    [4] => C18_NLE00102.DATE) as Week 
    [5] => DATEPART( year 
    [6] => C18_NLE00102.DATE) as Year FROM C18_NLE001 C18_NLE00102 INNER JOIN CLIENT_NLE001 CLIENT_NLE00103 ON C18_NLE00102.INDICE = CLIENT_NLE00103.INDICE 
) 

私は使用しています:

$more_dwarf_array = split(', ?',$QuerySaved );
print_r($more_dwarf_array);

問題はDATEPARTです。

4

1 に答える 1

1

このサンプルの作業コード:

$string = 'SELECT C18_NLE00102.DETAIL
,C18_NLE00102.LIB_STATUS
,CLIENT_NLE00103.SIZO_CAMPAIGN_ID__C
,DATEPART( week,C18_NLE00102.DATE) as Week
 ,DATEPART( year,C18_NLE00102.DATE) as Year
 FROM 
C18_NLE001 C18_NLE00102 INNER JOIN CLIENT_NLE001 CLIENT_NLE00103
 ON C18_NLE00102.INDICE = CLIENT_NLE00103.INDICE';

$array = preg_split('/(?<=^)\s*,|^(?=\s*FROM)/m', $string); // Split by ',' that's at the beginning of the line and also split if there is a FROM at the beginning
$array[count($array)-1] = str_replace(array("\r\n", "\r", "\n", "\t"), '', $array[count($array)-1]); // This is to remove all newlines/tabs in the FROM part
$array = array_map('trim', $array); // Remove spaces/newlines from the values of the array
print_r($array); // output

出力:

Array
(
    [0] => SELECT C18_NLE00102.DETAIL
    [1] => C18_NLE00102.LIB_STATUS
    [2] => CLIENT_NLE00103.SIZO_CAMPAIGN_ID__C
    [3] => DATEPART( week,C18_NLE00102.DATE) as Week
    [4] => DATEPART( year,C18_NLE00102.DATE) as Year
    [5] => FROM C18_NLE001 C18_NLE00102 INNER JOIN CLIENT_NLE001 CLIENT_NLE00103 ON C18_NLE00102.INDICE = CLIENT_NLE00103.INDICE
)

オンラインデモ

于 2013-05-11T12:38:01.947 に答える