Usuário com melhor resposta
converter para data

Pergunta
-
boas
tenho uma coluna com datas em nvarchar(max)
a data esta neste formato:
30-11-2011
dia-mes-ano
Preciso de copia-la para a coluna teste mas em formato data. Para depois conseguir fazer uma pesquisa com datas, achar a mais pequena e maior...
Mas preciso que se mantenha no mesmo formato. PAra não dar confusões.
Penso que o formato deverá ser o datetime(7) né?
obrigado
Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com
Respostas
-
Flashed,
No caso, você terá que que converter para DATETIME e tratar a exibição desta informação.
Segue um exemplo:
DECLARE @dt NVARCHAR(10)
SET @dt = '30-11-2011'
DECLARE @dtConv DATETIME
SET @dtConv = SUBSTRING(@dt,7,4) + SUBSTRING(@dt,4,2) + SUBSTRING(@dt,1,2)
SELECT @dt 'Valor NVARCHAR', @dtConv 'Valor DATETIME', REPLACE(CONVERT(CHAR(10),@dtConv,103),'/','-') 'Valor Tratado'
Att,
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 5 de abril de 2012 17:07
- Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
-
Bom dia Flashed,
Eu faria da seguinte forma:
update tabela set data = convert(datetime,F6,103)
Segue abaixo um script de teste:
create table #y ( a nvarchar(max), b datetime ) insert into #y values ('30-11-2011',null) update #y set b = convert(datetime,a,103)
Qualquer dúvida posta ae.
Abraços
- Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
-
Flashed,
Este campo data esta utilizando qual DataType?
Você já tentou em conjunto com a função Convert, utilizar a parâmetro, 103 para formatação de data?
Veja este exemplo:
DECLARE @dt NVARCHAR(10) SET @dt = '30-11-2011' DECLARE @dtConv DATETIME SET @dtConv = SUBSTRING(@dt,7,4) + SUBSTRING(@dt,4,2) + SUBSTRING(@dt,1,2) Select Convert(Varchar(10),@dtConv,103) 'Valor DATETIME'
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]
- Sugerido como Resposta Rafael Godoi Sabadin sábado, 7 de abril de 2012 14:02
- Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
-
Flashed, segue alguns exemplos, veja se te ajuda.
-- declarando uma tabela temporária declare @t as table (ColunaTexto varchar(max), ColunaData date) -- populando com algumas datas no formato de texto, conforme exemplo da pergunta. insert into @t (ColunaTexto) values ('30-11-2011'),('10-01-2000'),('01-04-2012'),('21-09-1998') -- comun select * from @t -- trazendo a maior e menor data select MIN(convert(date,ColunaTexto,105)) as MenorDt, MAX(convert(date,ColunaTexto,105)) as MaiorDt from @t -- atualizando a coluna data no formato de data update @t set ColunaData = convert(date,ColunaTexto,105) -- select final select * from @t
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
- Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
-
Bom dia!
Flashed,
Acho que você não entendeu meu exemplo, se F6 é o campo que contém a "data" no datatype NVARCHAR e estou supondo que o campo data que você está tentando realizar o update está como DATETIME, tente realizar o update da seguinte forma:
UPDATE tabela SET data = SUBSTRING(F6,7,4) + SUBSTRING(F6,4,2) + SUBSTRING(F6,1,2)
Ou mesmo desta forma:
UPDATE tabela SET data = CONVERT(DATETIME,F6,105)
Você também impôs o seguinte critério: "Mas preciso que se mantenha no mesmo formato. PAra não dar confusões.". Bom, é neste ponto é necessário que você trate a exibição desse dado na aplicação.
O exemplo abaixo retorna o campo data (datatype DATETIME) no formado DD/MM/AAAA:
SELECT CONVERT(CHAR(10),data,103) FROM tabela
No exemplo a seguir o campo data (datatype DATETIME) é retornado no seguinte formado DD-MM-AAAA, já que sua condição exigia que o dia, mês e ano fossem separados por hífen.
SELECT REPLACE(CONVERT(CHAR(10),data,103),'/','-') FROM tabela
Tudo o que foi proposto acima, você teria que criar uma coluna com o datatype DATETIME, mas o Leonardo postou uma forma interessante que contornar o problema, no caso você apenas queria que converter o dado NVARCHAR para DATETIME para achar a data mínima e máxima, porém penso que seria mais interessante você reestruturar seu banco inves de ficar realizando conversões de tipos de dados para utilizar funções agregadas.
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.- Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
Todas as Respostas
-
Flashed,
No caso, você terá que que converter para DATETIME e tratar a exibição desta informação.
Segue um exemplo:
DECLARE @dt NVARCHAR(10)
SET @dt = '30-11-2011'
DECLARE @dtConv DATETIME
SET @dtConv = SUBSTRING(@dt,7,4) + SUBSTRING(@dt,4,2) + SUBSTRING(@dt,1,2)
SELECT @dt 'Valor NVARCHAR', @dtConv 'Valor DATETIME', REPLACE(CONVERT(CHAR(10),@dtConv,103),'/','-') 'Valor Tratado'
Att,
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 5 de abril de 2012 17:07
- Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
-
estou a tnetar fazer algo deste genero..mas não dá
update tabela set data = REPLACE(CONVERT(CHAR(10),F6,103),'/','-')
onde F6 é o campo que tem a data em nvarchar(max)
obrigado
Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com
-
Bom dia Flashed,
Eu faria da seguinte forma:
update tabela set data = convert(datetime,F6,103)
Segue abaixo um script de teste:
create table #y ( a nvarchar(max), b datetime ) insert into #y values ('30-11-2011',null) update #y set b = convert(datetime,a,103)
Qualquer dúvida posta ae.
Abraços
- Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
-
Flashed,
Este campo data esta utilizando qual DataType?
Você já tentou em conjunto com a função Convert, utilizar a parâmetro, 103 para formatação de data?
Veja este exemplo:
DECLARE @dt NVARCHAR(10) SET @dt = '30-11-2011' DECLARE @dtConv DATETIME SET @dtConv = SUBSTRING(@dt,7,4) + SUBSTRING(@dt,4,2) + SUBSTRING(@dt,1,2) Select Convert(Varchar(10),@dtConv,103) 'Valor DATETIME'
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]
- Sugerido como Resposta Rafael Godoi Sabadin sábado, 7 de abril de 2012 14:02
- Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
-
Flashed, segue alguns exemplos, veja se te ajuda.
-- declarando uma tabela temporária declare @t as table (ColunaTexto varchar(max), ColunaData date) -- populando com algumas datas no formato de texto, conforme exemplo da pergunta. insert into @t (ColunaTexto) values ('30-11-2011'),('10-01-2000'),('01-04-2012'),('21-09-1998') -- comun select * from @t -- trazendo a maior e menor data select MIN(convert(date,ColunaTexto,105)) as MenorDt, MAX(convert(date,ColunaTexto,105)) as MaiorDt from @t -- atualizando a coluna data no formato de data update @t set ColunaData = convert(date,ColunaTexto,105) -- select final select * from @t
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
- Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
-
Bom dia!
Flashed,
Acho que você não entendeu meu exemplo, se F6 é o campo que contém a "data" no datatype NVARCHAR e estou supondo que o campo data que você está tentando realizar o update está como DATETIME, tente realizar o update da seguinte forma:
UPDATE tabela SET data = SUBSTRING(F6,7,4) + SUBSTRING(F6,4,2) + SUBSTRING(F6,1,2)
Ou mesmo desta forma:
UPDATE tabela SET data = CONVERT(DATETIME,F6,105)
Você também impôs o seguinte critério: "Mas preciso que se mantenha no mesmo formato. PAra não dar confusões.". Bom, é neste ponto é necessário que você trate a exibição desse dado na aplicação.
O exemplo abaixo retorna o campo data (datatype DATETIME) no formado DD/MM/AAAA:
SELECT CONVERT(CHAR(10),data,103) FROM tabela
No exemplo a seguir o campo data (datatype DATETIME) é retornado no seguinte formado DD-MM-AAAA, já que sua condição exigia que o dia, mês e ano fossem separados por hífen.
SELECT REPLACE(CONVERT(CHAR(10),data,103),'/','-') FROM tabela
Tudo o que foi proposto acima, você teria que criar uma coluna com o datatype DATETIME, mas o Leonardo postou uma forma interessante que contornar o problema, no caso você apenas queria que converter o dado NVARCHAR para DATETIME para achar a data mínima e máxima, porém penso que seria mais interessante você reestruturar seu banco inves de ficar realizando conversões de tipos de dados para utilizar funções agregadas.
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.- Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
-