Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mapb_1990

Retrição nas datas

Recommended Posts

boas,

 

tenho uma tabela que tem campos do tipo datetime (8) e precisava se fazer um SELECt a essa tabela com algumas restrições, sendo uma deslas é que o campo 'ObraDataEntrada' seja maior que hoje menos 30 dias, simplificando que seja do ultimo mês.

 

alguem sabe fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado pela ajuda.

procurei pela função, implementei-a, mas está-me a dar um erro:

Warning: mssql_query() [function.mssql-query]: message: Invalid column name 'ObraDias'. (severity 16) in D:\inetpub\vhosts\mavideo.pt\httpdocs\portal2.php on line 77

$query = "	SELECT DATEDIFF( DAY, GETDATE(), ObraDataEntrada ) as 'ObraDias', *
				FROM Obra_dt 
				WHERE " . (!$talaoObra ? "(ObraDataSaida IS NULL) " : "") .
					"AND (ObraDias <= 30)" .
					($nCliente || $telefone ? "AND (ObraClienteRef = " . $cliente_dt['ClienteID'] . ") " : "") .
					($talaoObra ? " (ObraDocCliente LIKE '%" . $talaoCliente . "%" . $talaoObra . "%') " : "") .
				"ORDER BY ObraDataEntrada DESC";
//	echo $query;
	$sql = mssql_query($query);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua restrição no where está errada... deveria ser assim:

 

$query = "	SELECT DATEDIFF( DAY, GETDATE(), ObraDataEntrada ) as 'ObraDias', *
				FROM Obra_dt
				WHERE " . (!$talaoObra ? "(ObraDataSaida IS NULL) " : "") .
					"AND ( DATEDIFF( DAY, GETDATE(), ObraDataEntrada ) <= 30)" .
					($nCliente || $telefone ? "AND (ObraClienteRef = " . $cliente_dt['ClienteID'] . ") " : "") .
					($talaoObra ? " (ObraDocCliente LIKE '%" . $talaoCliente . "%" . $talaoObra . "%') " : "") .
				"ORDER BY ObraDataEntrada DESC";

	$sql = mssql_query($query);

[]'s

 

ps.: não testei, mas observando sua select me parece que a solução é esta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua restrição no where está errada... deveria ser assim:

 

$query = "	SELECT DATEDIFF( DAY, GETDATE(), ObraDataEntrada ) as 'ObraDias', *
				FROM Obra_dt
				WHERE " . (!$talaoObra ? "(ObraDataSaida IS NULL) " : "") .
					"AND ( DATEDIFF( DAY, GETDATE(), ObraDataEntrada ) <= 30)" .
					($nCliente || $telefone ? "AND (ObraClienteRef = " . $cliente_dt['ClienteID'] . ") " : "") .
					($talaoObra ? " (ObraDocCliente LIKE '%" . $talaoCliente . "%" . $talaoObra . "%') " : "") .
				"ORDER BY ObraDataEntrada DESC";

	$sql = mssql_query($query);

[]'s

 

ps.: não testei, mas observando sua select me parece que a solução é esta.

como voce disse, ja n aparece o erro, mas está a mostrar tds as datas. nao ta a fazer a restrição dos ultimos 30 dias

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso ocorre porque você está usando a sua sintaxe do datediff de forma equivocada... olhe o que diz na sintaxe do datediff:

 

Syntax
 
DATEDIFF ( datepart , startdate , enddate )

Como você jogou no startdate (ou data inicial) o getdate(), sempre que a data for menor que o dia atual o retorno será negativo... como exemplo, rode estes selects:

 

select datediff(day,getdate()-1, getdate())

select datediff(day,getdate(), getdate()-1)

Os retornos que irá obter, respectivamente, serão 1 e -1.

 

Com base nisto, é só arrumar sua cláusula where e mudar a linha AND ( DATEDIFF( DAY, GETDATE(), ObraDataEntrada ) <= 30) por AND ( DATEDIFF( DAY, ObraDataEntrada , GETDATE()) <= 30).

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso ocorre porque você está usando a sua sintaxe do datediff de forma equivocada... olhe o que diz na sintaxe do datediff:

 

Syntax
 
DATEDIFF ( datepart , startdate , enddate )

Como você jogou no startdate (ou data inicial) o getdate(), sempre que a data for menor que o dia atual o retorno será negativo... como exemplo, rode estes selects:

 

select datediff(day,getdate()-1, getdate())

select datediff(day,getdate(), getdate()-1)

Os retornos que irá obter, respectivamente, serão 1 e -1.

 

Com base nisto, é só arrumar sua cláusula where e mudar a linha AND ( DATEDIFF( DAY, GETDATE(), ObraDataEntrada ) <= 30) por AND ( DATEDIFF( DAY, ObraDataEntrada , GETDATE()) <= 30).

 

[]'s

lol.

mt obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.