2
respostas

Function MONTH dando erro no pgAdmin

Boa tarde, pessoal. Estou tendo dificuldade em interpretar esse erro:

ERROR:  function month(date) does not exist
LINE 7: WHERE MONTH(Compra.data) BETWEEN 1 AND 1 AND YEAR(Compra.dat...
              ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
SQL state: 42883
Character: 376

O código que estou tentando executar é o seguinte:

SELECT Compra.id_compra, Compra.data, Compra.quantidade, Compra.valor, Pessoa.nome, Livro.nome, Livro.ISBN, Livro.ano_lancamento, Livro.preco, Livro.categoria, Livro.autor, Editora.nome
FROM Compra
INNER JOIN Pessoa ON Compra.id_pessoa = Pessoa.id_pessoa
INNER JOIN Livro ON Compra.id_livro = Livro.id_livro
INNER JOIN Editora ON Livro.id_editora = Editora.id_editora
WHERE MONTH(Compra.data) BETWEEN 1 AND 1 AND YEAR(Compra.data) = 2022

Esse comando deveria selecionar as informações das compras (id_compra, data, quantidade, valor), dos clientes (nome) e dos livros (nome, ISBN, ano_lancamento, preco, categoria, autor) comprados, bem como da editora (nome) que os publicou, realizadas no mês de janeiro de 2022.

Campos da tabela no select:

CREATE TABLE Pessoa (
  id_pessoa INTEGER PRIMARY KEY,
  nome VARCHAR(255) NOT NULL,
  telefone VARCHAR(15)
);

CREATE TABLE Editora (
  id_editora INTEGER PRIMARY KEY,
  nome VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL,
  telefone1 VARCHAR(15) NOT NULL,
  telefone2 VARCHAR(15)
);

CREATE TABLE Livro (
  id_livro INTEGER PRIMARY KEY,
  nome VARCHAR(255) NOT NULL,
  ISBN VARCHAR(13) NOT NULL,
  ano_lancamento INTEGER NOT NULL,
  preco DECIMAL(10,2) NOT NULL,
  categoria VARCHAR(255) NOT NULL,
  autor VARCHAR(255) NOT NULL,
  id_editora INTEGER,
  FOREIGN KEY (id_editora) REFERENCES Editora(id_editora)
);

CREATE TABLE Compra (
  id_compra INTEGER PRIMARY KEY,
  data DATE NOT NULL,
  quantidade INTEGER NOT NULL,
  valor DECIMAL(10,2) NOT NULL,
  id_pessoa INTEGER,
  id_livro INTEGER,
  FOREIGN KEY (id_pessoa) REFERENCES Pessoa(id_pessoa),
  FOREIGN KEY (id_livro) REFERENCES Livro(id_livro)
);
2 respostas

Olá Diogo, Qual banco de dados você está utilizando para executar esses exemplos?

No Oracle Database, a forma mais simples de extrair o Mes (MONTH) de um campo data é utilizando a função TO_CHAR(campo_data,'MM') e o ano (YEAR) seria to_char(campo_data,'YYYY').

Espero ter ajudado.

Abs.

Diego Melo

Estou utilizando o PostgreSQL.