Convertendo campo de data varchar em tipo de dados datetime [duplicado]

Dec 16 2020

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

1 Larnu Dec 16 2020 at 02:49

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.

Brad Dec 16 2020 at 02:33
-- 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:

  1. Adicione uma nova coluna à sua tabela para DateTime
  2. Execute uma atualização em sua tabela usando o Convert acima para atualizar a nova coluna com o valor convertido de seu campo varchar.
  3. 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