Ir para conteúdo

Arquivado

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

leandro318

SQL - Como extrair somente mês de uma data em DD/MM/AAAA?

Recommended Posts

Olá galera, boa tarde, tenho um banco de dados que rece datas digitadas por usuários no formato DD/MM/AAAA, estou precisando fazer umas consultas no banco e extrair somente o mês dessas datas para fazer relatórios mensais, gostaria de saber como devo proceder para fazer isso? Como devo fazer a consulta no banco para estar estraindo somente o mês de cada data?

Desde já agradeço a atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_commands_1029.htm

 

Todos os formatos de data , use a function to_char.

 

Lembro que data não é gravada em nenhum formato e sim no número de segundos passados desde uma determinada data.

O select faz uma conversão , quando esta não é informada vai a que está nos parametros de nls_date_format ou das de Session.

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_commands_1029.htm

 

Todos os formatos de data , use a function to_char.

 

Lembro que data não é gravada em nenhum formato e sim no número de segundos passados desde uma determinada data.

O select faz uma conversão , quando esta não é informada vai a que está nos parametros de nls_date_format ou das de Session.

 

 

mas como usa essa função? qual a sintaxe dela? nesse link não vi nada relacionado a essa função

Compartilhar este post


Link para o post
Compartilhar em outros sites

... TO_CHAR(DATA,'MM') ...

 

acho que essa função não vai servir para o que eu estou precisando, o negócio é o seguinte: tenho várias datas armazenadas no banco de dados no seguinte formato DD/MM/AAAA, vou receber do usuário via formulário um mês e um ano, gostaria de saber qual função SQL devo usar para verificar quais datas das presentes no banco estão dentro do mês e ano digitados pelo usuário?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usuario digitou 2013/06

 

Teste

 

Select *

from tabela

Where

To_char(data,'yyyy/dd') = '2013/06'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usuario digitou 2013/06

 

Teste

 

Select *

from tabela

Where

To_char(data,'yyyy/dd') = '2013/06'

não funcionou, está dando erro, veja como fiz:

 

$mes = $_POST ["mes"];

$ano = $_POST ["ano"];

//Verificar se existe alguma data no mês e ano digitado

$pesquisa = mysql_query ("SELECT cod_diaria, dataentrada, horaentrada, datasaida, horasaida, num_suite, tipo_suite, cpf_hospede, valorfinal_diaria, num_diarias FROM diarias

WHERE To_char(dataentrada,'yyyy/dd') = '$ano/$mes'");

 

Lembrando que as datas que estão no banco estão formato DD/MM/AAAA.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lembrando que as datas que estão no banco estão formato DD/MM/AAAA.

O campo é DATE ?

DATE é um número internamente, números de segundos passados de uma dterminada data (não lembro qual a base), o formatto que sai por padrão depende do paramentro NLS_DATE_FORMAT, este pode ser alterado por "session", ou pode-se definir o formato que quer de saída.

 

 

SELECT TO_CHAR(SYSDATE) PADRAO,
       TO_CHAR(SYSDATE,'dd/mm/yyyy') EUROPEU ,       
       TO_CHAR(SYSDATE,'mm/dd/yyyy') AMERICANO,       
       TO_CHAR(SYSDATE,'day, month, yyyy') ext
from dual

PADRAO   EUROPEU    AMERICANO  EXT                            
-------- ---------- ---------- ------------------------------
10/06/13 10/06/2013 06/10/2013 SEGUNDA-FEIRA, JUNHO    , 2013

 

 

 

 

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD';

Qual erro ocorre ?

 

tente

 

 

$mes = $_POST ["mes"];
$ano = $_POST ["ano"];
$mesano := $mes+'/'+$ano;
//Verificar se existe alguma data no mês e ano digitado
$pesquisa = mysql_query ("SELECT cod_diaria, dataentrada, horaentrada, datasaida, horasaida, num_suite, tipo_suite, cpf_hospede valorfinal_diaria, num_diarias FROM diarias
WHERE To_char(dataentrada,'yyyy/dd') = '$mesano'");

Não sei se acertei a síntexe, se concactena com "+" ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O campo é DATE ?

DATE é um número internamente, números de segundos passados de uma dterminada data (não lembro qual a base), o formatto que sai por padrão depende do paramentro NLS_DATE_FORMAT, este pode ser alterado por "session", ou pode-se definir o formato que quer de saída.

 

 

SELECT TO_CHAR(SYSDATE) PADRAO,
       TO_CHAR(SYSDATE,'dd/mm/yyyy') EUROPEU ,       
       TO_CHAR(SYSDATE,'mm/dd/yyyy') AMERICANO,       
       TO_CHAR(SYSDATE,'day, month, yyyy') ext
from dual

PADRAO   EUROPEU    AMERICANO  EXT                            
-------- ---------- ---------- ------------------------------
10/06/13 10/06/2013 06/10/2013 SEGUNDA-FEIRA, JUNHO    , 2013

 

 

 

 

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD';

Qual erro ocorre ?

 

tente

 

 

$mes = $_POST ["mes"];
$ano = $_POST ["ano"];
$mesano := $mes+'/'+$ano;
//Verificar se existe alguma data no mês e ano digitado
$pesquisa = mysql_query ("SELECT cod_diaria, dataentrada, horaentrada, datasaida, horasaida, num_suite, tipo_suite, cpf_hospede valorfinal_diaria, num_diarias FROM diarias
WHERE To_char(dataentrada,'yyyy/dd') = '$mesano'");

Não sei se acertei a síntexe, se concactena com "+" ?

 

O campo é DATE ?

DATE é um número internamente, números de segundos passados de uma dterminada data (não lembro qual a base), o formatto que sai por padrão depende do paramentro NLS_DATE_FORMAT, este pode ser alterado por "session", ou pode-se definir o formato que quer de saída.

 

 

SELECT TO_CHAR(SYSDATE) PADRAO,
       TO_CHAR(SYSDATE,'dd/mm/yyyy') EUROPEU ,       
       TO_CHAR(SYSDATE,'mm/dd/yyyy') AMERICANO,       
       TO_CHAR(SYSDATE,'day, month, yyyy') ext
from dual

PADRAO   EUROPEU    AMERICANO  EXT                            
-------- ---------- ---------- ------------------------------
10/06/13 10/06/2013 06/10/2013 SEGUNDA-FEIRA, JUNHO    , 2013

 

 

 

 

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD';

Qual erro ocorre ?

 

tente

 

 

$mes = $_POST ["mes"];
$ano = $_POST ["ano"];
$mesano := $mes+'/'+$ano;
//Verificar se existe alguma data no mês e ano digitado
$pesquisa = mysql_query ("SELECT cod_diaria, dataentrada, horaentrada, datasaida, horasaida, num_suite, tipo_suite, cpf_hospede valorfinal_diaria, num_diarias FROM diarias
WHERE To_char(dataentrada,'yyyy/dd') = '$mesano'");

Não sei se acertei a síntexe, se concactena com "+" ?

 

O campo não é DATE, por que na hora de o usuário preencher as datas, ele não iria aceitar no formato brasileiro DD/MM/AAAA, só iria aceitar no formato americado MM/DD/AAAA, então coloquei o campo do tipo texto mesmo e fiz de uma forma que o usuário é obrigado a digitar a data no formato DD/MM/AAAA. Por que tenho que fazer várias verificações e operações com essas datas e elas estando no formato americano dificulta muito.

Tentei desse modo ai, mas também não foi, ficou assim:

 

//Receber o mes e ano digitados
$mes = $_POST ["mes"];
$ano = $_POST ["ano"];
//é assim que se concatena em PHP
$mesano = $mes."/".$ano;
//Verificar se existe alguma diária no mês digitado
$pesquisa = mysql_query ("SELECT cod_diaria, dataentrada, horaentrada, datasaida, horasaida, num_suite, tipo_suite, cpf_hospede, valorfinal_diaria, num_diarias FROM diarias
WHERE To_char(dataentrada,'yyyy/dd') = '$mesano'");
//Coloquei o num_rows só para ver quantas linhas está tendo de resultado da consulta ao banco
$linhas = mysql_num_rows ($pesquisa);
echo "$linhas";

 

O erro está dando justamente no num_rows: "Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in"

O que significa que a consulta não está retornando nenhuma linha

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Banco é MySql pelo visto, não Oracle.

 

Vou mover este tópico para a área de Mysql , mas :

 

1) É sempre melhor trabalhar com a data no formato de DATE.

2) O que disse para Oracle (número de dias) vale para Mysql

3) Ao invés de TO_CHAR use as funções de data do MYSql.

4) Neste caso, campo string, use as funções de string do MySql, aqui no caso creio que substr ajude.

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.