Usuário com melhor resposta
Concerter DATA

Pergunta
-
Boa noite, estou com problema chato.
Primeiro eu pretendo converter uma data, em varias partes. Porem, eu pretendo converter uma data do tipo yyyy-mm-dd hh:......
Eu fazendo isto:
Convert(dd,getdate())
devolve o dia, por exemplo: 3 mas eu quero que devolva 03, ou seja com o ZERO antes, e nos meses igual...como fazer issso?
Ja agora, como solucionar a questão de ordenação de meses, por mes, e nao por ordem alfabética no SSAS e SSRS?
Respostas
-
A questão do zero antes do dia e do mês eu acredito que seja melhor você tratar na aplicação (front-end) do que diretamente no SQL. Isso caso se trate de se ter uma aplicação, rs.
Do contrário você pode usar alguns recursos do SQL para chegar ao resultado pretendido. Você pode usar funções como Replicate, Substring e Left para lhe auxiliar.
Algo como:
Select Left(CONVERT(VarChar, GetDate(), 103), 2)
Porém, se o comando for usado para grande volume de dados, pode acontecer de atrapalhar a utilização de índices por parte do SQL Server, caso existam índices sobre as colunas de data que estão em questão.
Então uma outra alternativa é você criar uma coluna computada que já terá a data convertida para o formato que precisa.
Inclusive para ordenação dos dados pelo mês de um campo data talvez valha à pena criar uma coluna computada que armazenará somente o mês. Mas você pode tentar ordenar diretamente pelo campo de data, utilizando a função Month, por exemplo, e avaliar o plano de execução, para verificar se está tendo algum problema de performance por estar agindo deste modo.
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Sugerido como Resposta Thiago Martins Coelho segunda-feira, 7 de maio de 2012 00:48
- Marcado como Resposta sql-enthusiast terça-feira, 29 de maio de 2012 15:10
Todas as Respostas
-
A questão do zero antes do dia e do mês eu acredito que seja melhor você tratar na aplicação (front-end) do que diretamente no SQL. Isso caso se trate de se ter uma aplicação, rs.
Do contrário você pode usar alguns recursos do SQL para chegar ao resultado pretendido. Você pode usar funções como Replicate, Substring e Left para lhe auxiliar.
Algo como:
Select Left(CONVERT(VarChar, GetDate(), 103), 2)
Porém, se o comando for usado para grande volume de dados, pode acontecer de atrapalhar a utilização de índices por parte do SQL Server, caso existam índices sobre as colunas de data que estão em questão.
Então uma outra alternativa é você criar uma coluna computada que já terá a data convertida para o formato que precisa.
Inclusive para ordenação dos dados pelo mês de um campo data talvez valha à pena criar uma coluna computada que armazenará somente o mês. Mas você pode tentar ordenar diretamente pelo campo de data, utilizando a função Month, por exemplo, e avaliar o plano de execução, para verificar se está tendo algum problema de performance por estar agindo deste modo.
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Sugerido como Resposta Thiago Martins Coelho segunda-feira, 7 de maio de 2012 00:48
- Marcado como Resposta sql-enthusiast terça-feira, 29 de maio de 2012 15:10
-
Eu tenho este código:
create table TESTE_TEMPO(
[DataID] [int] IDENTITY(1,1) Primary Key NOT NULL,
[Data] [datetime] NOT NULL,
[Dia] [int] NOT NULL,
[Ano] [int] NOT NULL)
declare @dataini as datetime
declare @datafin as datetime
declare @dia as int,
@ano as int
set @dataini ='2012-01-01'
set @datafin ='2012-06-06'
while @dataini <= @datafin
begin
set @dia = DATEPART(DD,@dataini)
set @ano = DATEPART(YEAR,@dataini)
insert into TESTE_TEMPO
select
@dataini as data,
@ano as ano,
@dia as dia
end
Ele me devolve o dia sem o zero a esquerda.
- Editado sql-enthusiast segunda-feira, 7 de maio de 2012 09:48
- Marcado como Resposta sql-enthusiast terça-feira, 29 de maio de 2012 15:11
- Não Marcado como Resposta sql-enthusiast terça-feira, 29 de maio de 2012 15:11