Convertendo campo de data varchar em tipo de dados datetime [duplicado]
Cometi o erro de usar varchar para armazenar meus dados que representam data / hora. Agora estou tentando converter minha coluna de dados de texto, armazenados como um varchar, assim:
2020-11-25T14:22:41.3539327Z
Em uma coluna que armazena um tipo de dados datetime.
Respostas
Desde que todos os seus dados estejam no formato yyyy-MM-ddThh:mm:ss.nnnnnnn, você pode apenas alterar o tipo de dados da coluna:
ALTER TABLE dbo.YourTABLE ALTER COLUMN YourColumn datetime2(7);
Se você precisar do fuso horário lá, use em seu datetimeoffset(7)lugar.
-- to fix it you can use convert, below uses GetDate for examaple
SELECT convert(varchar, getdate(), 120)
dependendo de qual precisão você precisa, você pode usar o link abaixo para encontrá-la e alterar o 120 para qualquer número que você precisar para essa precisão.
https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/
Para consertar sua mesa, você deve seguir estas etapas:
- Adicione uma nova coluna à sua tabela para DateTime
- Execute uma atualização em sua tabela usando o Convert acima para atualizar a nova coluna com o valor convertido de seu campo varchar.
- Em seguida, elimine a coluna com os dados varchar.
Código para fazer as etapas que descrevi acima
ALTER TABLE dbo.TableName ADD NewDateTimeCOL DATETIME
-- NOTE if your table is LARGE you will not want to do a direct update like this but do looping for performace purposes
UPDATE dbo.TableName
SET NewDateTimeCOL = convert(varchar, OldDateTimeCOL, 120)
ALTER TABLE dbo.TableName DROP COLUMN OldDateTimeCOL