none
converter para semana do ano RRS feed

  • Pergunta

  • boas

    existe algum comando que me converta o valor data para a semana correspondente do ano?

    Tenho uma tabela em sql server com datas, a coluna que tem os dados está formatada como nvarchar (max).

    O objectivo seria converte a data: 01-01-2012 para Semana 1 de 2012

    é possivel?

    obrigado 


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quarta-feira, 28 de março de 2012 13:33

Respostas

  • create table teste21 (campo_data datetime)

    insert into teste21 values(SYSDATETIME()); select DATENAME(DAYOFYEAR,campo_data)/7+1, year(campo_data) as SEMANA from teste21

    Este vai te mostrar o número da semana e logo em seguida o ano.

    No caso 13, 2012, 13ª semana do ano.

    Acho que isso resolve teu problema.

    Espero que ajude.

    Vlew


    --
    Marcus Vinícius Bittencourt
    blog: isqlserver.wordpress.com
    www.sqlserverRS.com.br

    • Marcado como Resposta Jonas São Paulo quinta-feira, 29 de março de 2012 14:00
    quinta-feira, 29 de março de 2012 13:49
  • Flashed,

    O exemplo que o Eduardo post, faz uso da chamada Table Temp(Tabela Temporária), toda e qualquer tabela seja ela Local ou Global fica fisicamente armazenada no banco de dados de sistema TempDB, mas existe lógicamente no banco de dados que ela foi criada durante a execução do código.

    Se você acessar o TempDB poderá encontrar esta tabela.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Jonas São Paulo quinta-feira, 29 de março de 2012 14:10
    quinta-feira, 29 de março de 2012 13:59

Todas as Respostas

  • Tenta essa query ai ve se ajuda.

    SELECT
       GETDATE() AS UnconvertedDateTime,
       CAST(GETDATE() AS nvarchar(30)) AS UsingCast,
       CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601  ;

    quarta-feira, 28 de março de 2012 13:39
  • onde especifico o nome da tabela? e o campo?

    obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quarta-feira, 28 de março de 2012 13:42
  • Flashed, boa tarde.

    Segue o exemplo:

    create table #tmpX (data nvarchar(max))
    
    insert #tmpX
    select '01-01-2012'
    union
    select '25-04-2012'
    union
    select '31-10-2012'
    
    
    select data, datepart(WEEK,(CAST(data as date))) as [Dia da Semana] from #tmpX

    Após o teste copie o parte do DATEPART para seu código atual e substitua pela sua tabela original.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quarta-feira, 28 de março de 2012 16:26
  • Exprimentei assim e deu isto:

    select * from #tmpX 

    select data, datepart(WEEK,(CAST(data as date))) as [Dia da Semana] from #tmpX

    Erro:

    Msg 241, Level 16, State 1, Line 1

    Conversion failed when converting date and/or time from character string.

    Já agora onde foi criada a tabela #tmpX??' é que não a vejo

    Obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quarta-feira, 28 de março de 2012 16:34
  • Olá Flashed, veja se resolve teu problema.

    declare @datahora DATETIME = SYSDATETIME();
    
    select DATENAME(DAYOFYEAR,@datahora)/7+1 as SEMANA

    no meu caso declarei uma variável para o campo data, mas poderia ser este mesmo em um select como este:

    create table teste21 (campo_data datetime)
    
    insert into teste21 values(SYSDATETIME());
    
    select DATENAME(DAYOFYEAR,campo_data)/7+1 as SEMANA from teste21
    Espero que ajude, vlew.


    --
    Marcus Vinícius Bittencourt
    blog: isqlserver.wordpress.com
    www.sqlserverRS.com.br

    quarta-feira, 28 de março de 2012 16:34
  • SELECT
       nomecampo_data AS UnconvertedDateTime,
       CAST(nomecampo_data AS nvarchar(30)) AS UsingCast,
       CONVERT(nvarchar(30), nomecampo_data, 126) AS UsingConvertTo_ISO8601  from nome_tbl

    quarta-feira, 28 de março de 2012 19:18
  • Romy, se não estou enganado, acredito que o Flashed deseje apenas converter a data no número da semana dentro do ano.

    Basta utilizar a função datepart com week. Ex. select datepart(week,data) from tabela

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quarta-feira, 28 de março de 2012 19:25
  • Romy, se não estou enganado, acredito que o Flashed deseje apenas converter a data no número da semana dentro do ano.

    Basta utilizar a função datepart com week. Ex. select datepart(week,data) from tabela

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp


    Pode ser feito assim também eu não pessei nesta função, mas mostrei a caminho das pedras indicando que ele de usar funções em suas querys.
    quarta-feira, 28 de março de 2012 19:32
  • Romy, se não estou enganado, acredito que o Flashed deseje apenas converter a data no número da semana dentro do ano.

    Basta utilizar a função datepart com week. Ex. select datepart(week,data) from tabela

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    boas

    OBrigado a todos pela ajuda :)

    O que preciso é mesmo o que o eduardo reforçou. Preciso de converter a data para ex: Semana 1 Ano 2012.

    Pois na tabela tenho varias datas de anos diferentes e se converter apenas para o nome da semana perco a referencia do ano, o que não dá.

    Eduardo o código que me passou esta-me a dar erro:

    Msg 241, Level 16, State 1, Line 1

    Conversion failed when converting date and/or time from character string.

    Obrgiado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quinta-feira, 29 de março de 2012 08:41
  • create table teste21 (campo_data datetime)

    insert into teste21 values(SYSDATETIME()); select DATENAME(DAYOFYEAR,campo_data)/7+1, year(campo_data) as SEMANA from teste21

    Este vai te mostrar o número da semana e logo em seguida o ano.

    No caso 13, 2012, 13ª semana do ano.

    Acho que isso resolve teu problema.

    Espero que ajude.

    Vlew


    --
    Marcus Vinícius Bittencourt
    blog: isqlserver.wordpress.com
    www.sqlserverRS.com.br

    • Marcado como Resposta Jonas São Paulo quinta-feira, 29 de março de 2012 14:00
    quinta-feira, 29 de março de 2012 13:49
  • Boas

    MArcus o seu código funcionou beleza. Mas no meu caso o campo que te a data esta com nvarchar(max) e no formato 01-02-2012.

    Como adapto o código para o nvarchar?

    select DATENAME(DAYOFYEAR,campo_data)/7+1, year(campo_data) as SEMANA from teste21

    Obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quinta-feira, 29 de março de 2012 13:56
  • Flashed,

    O exemplo que o Eduardo post, faz uso da chamada Table Temp(Tabela Temporária), toda e qualquer tabela seja ela Local ou Global fica fisicamente armazenada no banco de dados de sistema TempDB, mas existe lógicamente no banco de dados que ela foi criada durante a execução do código.

    Se você acessar o TempDB poderá encontrar esta tabela.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Jonas São Paulo quinta-feira, 29 de março de 2012 14:10
    quinta-feira, 29 de março de 2012 13:59
  • Olá Flashed, use um CAST no campo para converte-lo em data.

    CAST(campo as datetime)

    Acredito que deva resolver.

    Se tu tens a garantia que o campo terá somente datas, pois senão pode dar erro na conversão.

    Espero que ajude.


    --
    Marcus Vinícius Bittencourt
    blog: isqlserver.wordpress.com
    www.sqlserverRS.com.br

    quinta-feira, 29 de março de 2012 14:01
  • select Cast(DATENAME(DAYOFYEAR,campo_data)/7+1) As datetime, year(campo_data) as SEMAN from teste21

    Dame erro de 

    Msg 1035, Level 15, State 10, Line 1
    Incorrect syntax near 'Cast', expected 'AS'.

    GAronte que a coluna só terá datas em nvarchar :)

    Obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quinta-feira, 29 de março de 2012 14:10
  • Oi Flashed, o CAST vai la dentro somente para o campo data.

    select DATENAME(DAYOFYEAR,CAST(campo_data as datetime))/7+1), year( CAST(campo_data as datetime)) as SEMAN from teste21

    Acredito que seja isso.


    --
    Marcus Vinícius Bittencourt
    blog: isqlserver.wordpress.com
    www.sqlserverRS.com.br

    quinta-feira, 29 de março de 2012 14:36
  • Faltava um (

    Estou a experimentar assim:

    select DATENAME(DAYOFYEAR,CAST(campo_data as datetime)/7+1), year(CAST(campo_data as datetime)) as SEMAN from teste21

    Mas da-me um erro:

    Msg 257, Level 16, State 3, Line 1
    Implicit conversion from data type datetime to int is not allowed. Use the CONVERT function to run this query.

    Obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quinta-feira, 29 de março de 2012 14:59