none
Concerter DATA RRS feed

  • 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?

    segunda-feira, 7 de maio de 2012 00:17

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.br

    Se 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.

    segunda-feira, 7 de maio de 2012 00:33
    Moderador

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.br

    Se 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.

    segunda-feira, 7 de maio de 2012 00:33
    Moderador
  • 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 Oliver Kimb segunda-feira, 7 de maio de 2012 09:48
    • Marcado como Resposta Oliver Kimb terça-feira, 29 de maio de 2012 15:11
    • Não Marcado como Resposta Oliver Kimb terça-feira, 29 de maio de 2012 15:11
    segunda-feira, 7 de maio de 2012 09:47