Ir para conteúdo

POWERED BY:

Arquivado

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

FabianoSouza

Comparar data e hora entre variável do form e recordset

Recommended Posts

O objetivo final é o seguinte. Se a data/hora do recordset for igual ou maior do que a data e hora dos campos do form então escreve "Livre", caso contrário escreve "Indisponível". Situação clássica.

Por favor, vejam o print para facilitar o entendimento do problema.

datas.png

O dia 01/02 também deveria estar Livre (é maior do que a data/hora do form).

 

Este trecho é de captura dos dados do form. Basicamente concateno o campo data com os campos hora inicial e hora final para obter o formato dd/mm/yyyy/ hh:mm. Não sei se é forma correta para obter uma data...

 

var_data = Request.Form("data")
var_hora_inicial = Request.Form("inicio")
var_hora_final = Request.Form("fim")
var_data_inicial_completa = var_data &" " & var_hora_inicial
var_data_final_completa = var_data &" " & var_hora_final

Agora meu select...

 

strSQL = " SELECT "
strSQL = strSQL &" RESERVA_ATIVO.ReservaAtivoCod, RESERVA_ATIVO.ReservaAtivoCodItem, "
strSQL = strSQL &" CONVERT (DATETIME, ReservaAtivoDataInicial, 120) AS DataInicial, "
strSQL = strSQL &" CONVERT(DATETIME, ReservaAtivoDataFinal, 120) AS DataFinal, "
strSQL = strSQL &" RESERVA_ATIVO.ReservaAtivoCodAtivo"
strSQL = strSQL &" FROM RESERVA_ATIVO INNER JOIN "
strSQL = strSQL &" ATIVOS ON RESERVA_ATIVO.ReservaAtivoCodAtivo = ATIVOS.AtivosCod"
strSQL = strSQL &" WHERE "
strSQL = strSQL &" RESERVA_ATIVO.ReservaAtivoCodAtivo = '"& var_cod_ativo &"' "
strSQL = strSQL &" AND ReservaAtivoDataInicial >= CONVERT(DATETIME,CONVERT(CHAR(10),GETDATE(),103)) "
strSQL = strSQL &" AND ReservaAtivoDataFinal >= CONVERT(DATETIME,CONVERT(CHAR(10),GETDATE(),103)) "

 

E finalmente o trecho de comparação...

If  Left(rs("DataInicial"),16) >= var_data_inicial_completa Then...

Tenho que comparar a data criada via concatenação (variável var_data_inicial_completa) com o valor do recordset.

Pelo menos visualmente (ao dar um response.write) tanto a variável quanto o recordset são exibidos no padrão dd/mm/yyyy hh:mm.

 

Um help por caridade. Faz uns quinze dias que estou com este problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara...vms lá !

 

Sua data já esta vindo correta, com a Conversão que vc fez?

 

Caso sim, vms para próxima parte.

 

No próprio SQL, vc pode fazer um Case When e determinar se a sala esta livre ou ocupada.

 

Ficaria mais ou menos assim:

 

 

Select
'Status'= CASE
	  WHEN Data_Inicial >= '" & Data_Ini_Form & "' THEN "Ocupado"
	  Else "Livre"
End

No ASP

 

<%=Response.Write("Status")%>

 

Testa ae...e vai postando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Morpheus. Vc perguntou se a data está vindo correta com a conversão que fiz.

Agora que notei. Aparece neste formato: yyyy/mm/dd hh:mm:ss:00:000. Acho que tem algo errado na minha conversão.

 

Como trago no formato dd/mm/yyyy hh:mm?

 

Enquanto isso vou testar sua sugestão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Roda isso no seu banco, trocando GETDATE() pela data correta.

 

SELECT CONVERT(VARCHAR(12),GETDATE(),101) AS '101',
CONVERT(VARCHAR(12),GETDATE(),102) AS '102',
CONVERT(VARCHAR(12),GETDATE(),103) AS '103',
CONVERT(VARCHAR(12),GETDATE(),104) AS '104',
CONVERT(VARCHAR(12),GETDATE(),105) AS '105',
CONVERT(VARCHAR(12),GETDATE(),106) AS '106',
CONVERT(VARCHAR(12),GETDATE(),107) AS '107',
CONVERT(VARCHAR(12),GETDATE(),108) AS '108',
CONVERT(VARCHAR(12),GETDATE(),109) AS '109',
CONVERT(VARCHAR(12),GETDATE(),110) AS '110',
CONVERT(VARCHAR(12),GETDATE(),111) AS '111',
CONVERT(VARCHAR(12),GETDATE(),112) AS '112',
CONVERT(VARCHAR(12),GETDATE(),113) AS '113',
CONVERT(VARCHAR(12),GETDATE(),114) AS '114',
CONVERT(VARCHAR(12),GETDATE(),120) AS '120',
CONVERT(VARCHAR(12),GETDATE(),121) AS '121'

Compartilhar este post


Link para o post
Compartilhar em outros sites

O CONVERT(VARCHAR(12),GETDATE(),103) AS '103', trás data dd/mm/yyyy...mas não o horário.

 

Antes de ver sua resposta estava pesquisando...parece que o SQL não tem um destes códigos (100,101, 102..) para trazer no formato que falei.

Parece que tem que fazer uma"gambi" usando o 103 para pegar a data, depois usar um " cento e alguma coisa" para pegar a hora e depois concatenar os dois. É neste caminho ou falei bobagem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

use assim para deixar no formato que quiser

 

Formato: aaaa-mm-dd

<%
Function ConverterDataBanco(ConDataBanco)
    ConDataBanco = Year(ConDataBanco) &"-"& Right("0"&Month(ConDataBanco),2) &"-"& Right("0"&Day(ConDataBanco),2)
    ConverterDataBanco = ConDataBanco
End Function

Response.Write(ConverterDataBanco(Date()))
%>


Formato: dd-mm-aaaa
<%
Function ConverterDataBanco(ConDataBanco)
    ConDataBanco = Right("0"&Day(ConDataBanco),2) &"-"& Right("0"&Month(ConDataBanco),2) &"-"& Year(ConDataBanco)
    ConverterDataBanco = ConDataBanco
End Function

Response.Write(ConverterDataBanco(Date()))
%>


Formato: mm-dd-aaaa
<%
Function ConverterDataBanco(ConDataBanco)
    ConDataBanco = Right("0"&Month(ConDataBanco),2) &"-"& Right("0"&Day(ConDataBanco),2) &"-"& Year(ConDataBanco)
    ConverterDataBanco = ConDataBanco
End Function

Response.Write(ConverterDataBanco(Date()))
%>


Formato: mm/dd/aaaa
<%
Function ConverterDataBanco(ConDataBanco)
    ConDataBanco = Right("0"&Month(ConDataBanco),2) &"/"& Right("0"&Day(ConDataBanco),2) &"/"& Year(ConDataBanco)
    ConverterDataBanco = ConDataBanco
End Function

Response.Write(ConverterDataBanco(Date()))
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado xanburzum.

Agora estou usando a function. As datas (do form e do recodset) estão com o mesmo formato (dd/mm/yyyy hh:mm).

 

If full_date(rs("DataInicial")) >= full_date(var_data_inicial_completa) Then...

 

A função full_date é esta.

 

Function full_date(data)
full_date = Right("0" & DatePart("d", data),2) & "/" & Right("0" & DatePart("m", data),2) & "/" & DatePart("yyyy", data) & " "& Right("0"&DatePart("h", data),2)& ":"&Right("0"&DatePart("n", data),2)
End Function

 

Mas ainda assim a comparação não funciona corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha um exemplo que uso

 

 

Select CAST(operation_date AS VARCHAR(50)) from T_FLIGHT Where CAST(operation_date AS VARCHAR(50)) LIKE '%'
Select operation_date from T_FLIGHT Where operation_date LIKE '11-MAY-2012%'

vê se clareia alguma coisa

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.