terça-feira, 15 de junho de 2010

Usando as funções SUBSTRING , CHARINDEX e LEN

Substring e Charindex são funções de manipulação de strings.

CHARINDEX - Retorna a posição inicial onde a string ("String a ser pesquisada") foi encontrada no texto. Se a tring não for encontrada, a função retorna zero.

Sintaxe: Charindex("String a ser pesquisada",texto)
Exemplo: Select Charindex('a', 'Brasil')
Resultado: 3

SUBSTRING - Retorna uma string com o tamanho definido em "posição final", extraída da string "texto", a partir da "posição inicial".

Sintaxe: Substring("texto", "posição inicial", "posição final")
Exemplo: Select Substring('Brasil hexa campeão', 1, 6)
Resultado: Brasil

LEN - Retorna o tamanho da string informada.

Sintaxe: LEN (string)
Exemplo: Select Len('A copa do mundo é nossa')
Resultado: 23

Um exemplo utilizando as três funções:

Tenho uma coluna (ano) em uma tabela (Copa_Mundo) que possui dados da seguinte forma: 2008_2010 .
Preciso fazer uma consulta que traga esses dados a partir do primeiro caracter depois do '_' até o final da string.

Ficaria assim:

SELECT substring(ano, (charindex('_', ano)+1), LEN (ano)) AS Ano
from Copa_mundo

Resultado:


sexta-feira, 4 de junho de 2010

Como transformar linhas em colunas no SQL 2000?

Essa dica é bem interessante, pois o sql 2000 não possui a função PIVOT que é utilizada no SQL 2005.
Então vamos lá.Eu tenho a seguinte tabela:







Eu preciso retornar os dados assim:





A minha sugestão é a seguinte:

CREATE TABLE #Produto(
id_produto INT,
cor VARCHAR(10),
qtde INT
)

INSERT INTO #
Produto (id_produto,cor,qtde) VALUES (1030,'azul',10)
INSERT INTO #
Produto (id_produto,cor,qtde) VALUES (1030,'verde',5)
INSERT INTO #
Produto (id_produto,cor,qtde) VALUES (1030,'amarelo',3)

SELECT DISTINCT id_produto,MAX(azul) AS azul,MAX(verde) AS verde,MAX(amarelo) AS amarelo FROM (
SELECT id_produto,
azul = ( CASE cor WHEN 'azul' THEN QTDE END),
verde = ( CASE cor WHEN 'verde' THEN QTDE END),
amarelo= ( CASE cor WHEN 'amarelo' THEN QTDE END)
FROM #produto
) AS Tabela
GROUP BY ID_produto

DROP TABLE #produto

Resultado: