2013-05-11 125 views
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。

该样品
+3

你需要一些比split更复杂的东西。搜索“sql tokenizer php”或“sql lexer php”应该会给你一个好的开始 – hank 2013-05-11 11:39:54

+0

谢谢我会尽力而为。 – Jacobs 2013-05-11 11:41:44

回答

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 
) 

Online demo

+1

谢谢你,这将工作。 – Jacobs 2013-05-12 11:53:01

+0

@ user2358570不客气 – HamZa 2013-05-12 11:55:13

+1

非常好,这个! +1 – Jimbo 2013-05-16 08:52:11

相关问题