Usuário com melhor resposta
converter para semana do ano

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
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
-
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
Todas as Respostas
-
-
-
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
- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 29 de março de 2012 13:57
-
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
-
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 -
-
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
-
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. -
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
-
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
-
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
-
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
-
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 -
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
-
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 -
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