SELECT to_char(now(), 'DD/MM/YYYY às HH24:MI:SS')
Irá imprimir, por exemplo: “09/08/2017 às 14:32”
SELECT to_char(now(), 'DD/MM/YYYY às HH24:MI:SS')
Irá imprimir, por exemplo: “09/08/2017 às 14:32”
Por exemplo: Digamos que você deseja saber quais são as últimas 3 letras de um nome:
SUBSTRING('Paulo' FROM '.{3}$')
Retornará ‘ulo’
Quem trabalha com o Oracle PL/SQL sabe que você pode obter isso através do NextVal() da seqüência, mas como fazer isso no MySQL?
Eu estava tentando gerar um código Hash para ser utilizado como uma referência externamente a um documento – para não exibir o ID interno usado na tabela -, mas não queria utilizar duas consultas (Um insert, e um select para obter o valor inserido).
Para resolver este problema em uma consulta apenas, criei uma função no banco de dados que me retornaria este valor:
CREATE FUNCTION `getAutoincrementalNextVal`(`TableName` VARCHAR(50)) RETURNS BIGINT LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN DECLARE Value BIGINT; SELECT AUTO_INCREMENT INTO Value FROM information_schema.tables WHERE table_name = TableName AND table_schema = DATABASE(); RETURN Value; END
Para utilizar esta função, basta passar como parâmetro o nome da tabela que se deseja obter o valor do próximo ID (campo auto-incremental):
SELECT getAutoincrementalNextval ('document')
No meu código, para gerar o Hash para o documento, fiz da seguinte forma:
INSERT INTO document (Code, Title, Body) VALUES ( sha1( concat (convert (now(), char), ' ', getAutoincrementalNextval ('document') ) ), 'Title', 'Body' );
Este código hash foi apenas uma forma de não expor ao usuário o código interno de meu documento. Para gerar um código único eu crio uma pré-imagem SHA-1 baseada na junção da hora atual e o ID do registro.
Utilize a consulta abaixo:
SELECT * FROM ALL_source WHERE UPPER(text) LIKE '%TEXTO%';
A consulta acima irá pesquisar pela palavra “TEXTO” dentro de todos os procedimentos armazenados contidos no servidor de banco de dados.
SELECT
*
FROM (
SELECT
trunc((months_between(sysdate, to_date('17/02/2015','dd/mm/yyyy')))/12) AS idade
FROM DUAL
)
GROUP BY idade
Este é um exemplo simples, imagine que você deseja mostrar todos as frutas, mesmo as que tem a quantidade com o valor 0. Em algumas ocasiões não é possível pois os filtros aplicados no Where terminam eliminando todos os registros daquele tipo de classe. No exemplo abaixo exibiria Morango, mas não seria exibida Banana.
SELECT
id
Count(*) quantidade
FROM
frutas
WHERE
frutas.cor = ‘Vermelho’
GROUP BY ID
ORDER BY ID
A solução para isso é listar todas os registros do dicionário de frutas e fazer um left join com a consulta.
SELECT
dicionarioFrutas.id
dicionarioFrutas.nome
consultaFrutas.quantidade
FROM
(SELECT frutas.id, frutas.nome FROM frutas) dicionarioFrutas,
(
SELECT
id
Count(*) quantidade
FROM
frutas
WHERE
frutas.cor = ‘Vermelho’
GROUP BY ID
ORDER BY ID
) consulta
WHERE dicionarioFrutas.ID = consultaFrutas.ID (+) — LEFT JOIN do PL/SQL
ORDER BY dicionarioFrutas.ID
Assim teriamos como resultado:
Morango: 1
Banana: Null
Estava precisando criar um outro banco de dados para trabalhar com uma nova versão de um sistema, e me deparei com uma dúvida: como faço para copiar a tabela de um banco de dados para outro banco de dados em um mesmo servidor?
A resposta é simples! Digamos que você tenha dois bancos “BancoAntigo” e “BancoNovo”, e você deseja copiar a tabela “Teste” do “BancoAntigo” para o “BancNovo”:
DROP TABLE IF EXISTS BancoNovo.Teste; CREATE TABLE BancoNovo.Teste SELECT * FROM BancoAntigo.Teste;
Uma determinada tabela existe em meu banco de dados? Se você precisa descobrir isso, ou se está tentando remover uma tabela, apenas se ela já tiver sido criada no banco de dados (evitando assim o erro de execução), este código pode lhe ser útil:
if exists (select * from dbo.sysobjects where id = object_id(N'.[dbo].[NOMEDATABELA]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) DROP TABLE [dbo].[NOMEDATABELA]
A cláusula EXIST, segundo o site MSDN da microsoft, especifica uma subconsulta a ser testada quanto à existência de linhas. IN segundo o site MSDN da Microsoft determina se um valor especificado corresponde a qualquer valor em uma subconsulta ou uma lista.
Por exemplo: Imagine em um sistema previdenciário, um relatório que deseja trazer todos os credenciados que tem dependentes.
SELECT nome, matricula FROM credenciado WHERE EXIST ( SELECT ID FROM dependente WHERE dependente.responsavelID = credenciado.ID )
A consulta retornará apenas credenciados que tenham pelo menos um dependente. Como a claúsula EXIST deseja saber se existe pelo menos um, ele não realizará uma busca em toda a base de dados (Full Scan). No momento em que a subconsulta encontrar o primeiro resultado será finalizada, poupando recursos do servidor.
A cláusula IN tem um funcionamento diferente, utiliza-se quando o objetivo é verificar se a consulta retorna algum linha que esteja compatível com valores especificados.
Por exemplo: No mesmo sistema previdenciario, um relatório que se deseja trazer todos os credenciados que já morreram ou são inválidos.
SELECT nome, matricula FROM credenciado WHERE status IN (FALECIDO, INVALIDOS)
Os valores especificados podem ser através de uma subconsulta.