2017-02-07 5 views
0

このコードは日付をキャプチャすることしかできず、すべての時刻をキャプチャします。sol.datahorafim = 00:00:00dataInicial = 23:55:55です。これはどうすればいいですか?date to datetimeスクリプトPOSTGRESQLと時との時間

xmlからのパラメータを編集し、機能します。

XML:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<PARAMETERS> 
     <PARAM name='dataInicial' type='java.sql.Date' size='10' value='' description='citcorpore.comum.datainicio' fix='false' mandatory='true' reload='true' /> 
     <PARAM name='dataFinal' type='java.sql.Date' size='10' value='' description='citcorpore.comum.datafim' fix='false' mandatory='true' default='{TODAY}'/> 
     <PARAM name='contrato' type='java.lang.Integer' typeHTML='select' size='0'value='' description='Contrato' fix='false' mandatory='false' reload='true' onload='true'> 
      <OPTION value='-1' text='Todos'/>  
      <OPTIONS type='SQL' onload='true'> 
       SELECT idcontrato, numero+' '+nomefantasia 
       FROM contratos ct, clientes cl 
       where cl.idcliente = ct.idcliente 
       order by 2 
      </OPTIONS> 
     </PARAM> 
     <PARAM name='status' type='java.lang.Integer' typeHTML='select' size='0'value='' description='Status' fix='false' mandatory='false' reload='true' onload='true'> 
      <OPTION value='-1' text='Todos'/>  
      <OPTION value='6' text='Fechada'/> 
      <OPTION value='3' text='Cancelada'/>  
     </PARAM> 
     <PARAM name='executor' type='java.lang.String' value='' typeHTML='text' size='10' description='Executor' fix='false' mandatory='false'/> 
     <PARAM name='quantidade' type='java.lang.Integer' value='' typeHTML='text' size='10' description='Qtd Bases' fix='false' mandatory='false'/> 
</PARAMETERS> 

機能:

montarSql = function() { 
var sql = new importNames.StringBuilder(); 
var parametroContrato = hashParametros.get("PARAM.contrato"); 
var parametroExecutor = hashParametros.get("PARAM.executor"); 
var parametroQuantidade = hashParametros.get("PARAM.quantidade"); 
var parametroStatus = hashParametros.get("PARAM.status"); 

sql.append("select idsolicitacaoservico,nomeservico,idstatus,qtd_conhecimentos, nome, grupo "); 
sql.append("from "); 
sql.append("(select con.numero,ser.nomeservico,sol.idsolicitacaoservico, sol.idstatus,"); 
sql.append("(select count(idBaseConhecimento) from conhecimentosolicitacaoservico where "); 
sql.append("idsolicitacaoservico = sol.idsolicitacaoservico) qtd_conhecimentos, usu.nome, gr.nome grupo "); 
sql.append("from solicitacaoservico sol INNER JOIN servicocontrato scn ON sol.idservicocontrato = scn.idservicocontrato "); 
sql.append("JOIN servico ser ON scn.idservico = ser.idservico "); 
sql.append("JOIN contratos con ON scn.idcontrato = con.idcontrato "); 
sql.append("join bpm_itemtrabalhofluxo ite on ite.iditemtrabalho = sol.idtarefaencerramento "); 
sql.append("left join usuario usu on usu.idusuario = ite.idresponsavelatual "); 
sql.append("left join grupo gr on gr.idgrupo = sol.idgrupoatual "); 
sql.append("where ") 

    if (parametroExecutor != ""){ 
      sql.append(" emp.nome like '%");sql.append(parametroExecutor);sql.append("%' and "); 
    } 
    if(parametroContrato!="-1"){ 
     sql.append("(con.idcontrato = {PARAM.contrato}) and "); 
    } 
    if(parametroStatus !="-1"){ 
     sql.append(" sol.idstatus = ");sql.append(parametroStatus);sql.append(" and "); 
    } 
    sql.append(" sol.datahorafim BETWEEN {PARAM.dataInicial} and {PARAM.dataFinal} ) bs "); 

私は

+0

私はJavaとJavaScriptの両方で作業してきましたが、これはどういうものなのかまだ分かりません。しかし、私はSQLインジェクションが 'emp.nome like'の近くで可能であり、' sol.idstatus = 'の近くにある可能性があると確信しています。これらの中括弧を使用してプリペアドステートメントの値をバインドする場合、それらの場所でもあなたはなぜそうしないのですか? (最初のものは、 '% '、{PARAM.executor}、'% ')' – pozs

答えて

0

あなたの説明は非常に明確ではないが、多分あなたが欲しい欲しい正確に何のドキュメントが、何を参照してくださいしてみてくださいこのように比較する:

WHERE date_trunc('day', sol.datahorafim) BETWEEN ... AND ... 
+0

のような 'emp.nomeのようなものです:' sql.append( "date_trunc(' day '、sol.datahorafim )BETWEEN {PARAM.dataInicial}と{PARAM.dataFinal})bs ");'?おそらくおそらく。 –

+0

あなたが使用するプログラミング言語と環境が何であるか教えてくれないので、言い難いです。 –

+0

Javascript、すみません。 –