How to convert a varchar type from a column to datetime within a view using SQL?

0

I have a view with a column of type varchar and I am trying to convert this column to a type date time my code is here:

update temp_vertical_dashboard
set data = convert (datetime,data,101)

temp_vertical_dashboard is my view and date is the column within my view. When I run the error, does anyone know how to help me in this aspect please?

    
asked by anonymous 21.06.2017 / 13:42

1 answer

1

Everything will depend on the format of your date. With format 101 you are specifying that the format is mm/dd/aaaa . The code below returns the date 21/06/2017 :

DECLARE @data varchar(10) = '06/21/2017';

SELECT CONVERT(DATETIME, @data, 101);

If you are using the Brazilian format you should use code 103 for the conversion:

DECLARE @data varchar(10) = '21/06/2017';

SELECT CONVERT(DATETIME, @data, 103);

You can not do an update directly on your view , so you should change the definition of it to something like below:

ALTER VIEW temp_vertical_dashboard AS (
  SELECT CONVERT(DATETIME, t.data, 101) AS data
    FROM tabela t
)

In the CAST and CONVERT (Transact-SQL) documentation -time and time styles check the codes for date conversions.

Available translations:

╔═════════════════╦═══════════════════╦═══════════════════════════════════╦════════════════════════════════════════╗
║ Sem século (AA) ║ Com século (aaaa) ║ Standard                          ║ Entrada/saída (3)                      ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ -               ║ 0 ou 100 (1,2)    ║ Padrão para datetime e            ║ mês dd aaaa hh:miAM (ou PM)            ║
║                 ║                   ║ smalldatetime                     ║                                        ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 1               ║ 101               ║ EUA                               ║ 1 = mm/dd/aa                           ║
║                 ║                   ║                                   ║ 101 = mm/dd/aaaa                       ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 3               ║ 103               ║ Britânico/francês                 ║ 3 = dd/mm/aa                           ║
║                 ║                   ║                                   ║ 103 = dd/mm/aaaa                       ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 4               ║ 104               ║ Alemão                            ║ 4 = dd.mm.aa                           ║
║                 ║                   ║                                   ║ 104 = dd.mm.aaaa                       ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 5               ║ 105               ║ Italiano                          ║ 5 = dd-mm-aa                           ║
║                 ║                   ║                                   ║ 105 = dd-mm-aaaa                       ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 6               ║ 106 (1)           ║ -                                 ║ 6 = dd mês aa                          ║
║                 ║                   ║                                   ║ 106 = dd mês aaaa                      ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 7               ║ 107 (1)           ║ -                                 ║ 7 = Mês dd, aa                         ║
║                 ║                   ║                                   ║ 107 = Mês dd, aaaa                     ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 8               ║ 108               ║ -                                 ║ hh:mi:ss                               ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ -               ║ 9 ou 109          ║ Padrão + milissegundos            ║ mês dd aaaa hh:mi:ss:mmmAM (ou PM)     ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 10              ║ 110               ║ EUA                               ║ 10 = mm-dd-aa                          ║
║                 ║                   ║                                   ║ 110 = mm-dd-aaaa                       ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 11              ║ 111               ║ JAPÃO                             ║ 11 = aa/mm/dd                          ║
║                 ║                   ║                                   ║ 111 = aaaa/mm/dd                       ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 12              ║ 112               ║ ISO                               ║ 12 = aammdd                            ║
║                 ║                   ║                                   ║ 112 = aaaammdd                         ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ -               ║ 13 ou 113         ║ Padrão Europa + milissegundos     ║ dd mês aaaa hh:mi:ss:mmm (24h)         ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 14              ║ 114               ║ -                                 ║ hh:mi:ss:mmm(24h)                      ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ -               ║ 20 or 120 (2)     ║ ODBC canônico                     ║ aaaa-mm-dd hh:mi:ss(24h)               ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ -               ║ 21 or 121 (2)     ║ ODBC canônico (com milissegundos) ║ aaaa-mm-dd hh:mi:ss(24h)               ║
║                 ║                   ║ padrão para hora, data, datetime2 ║                                        ║
║                 ║                   ║ e datetimeoffset                  ║                                        ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ -               ║ 126 (4)           ║ ISO8601                           ║ aaaa-mm-ddThh:mi:ss.mmm (sem espaços)  ║
║                 ║                   ║                                   ║                                        ║
║                 ║                   ║                                   ║ Observação: Quando o valor de          ║
║                 ║                   ║                                   ║ milissegundos (mmm) for 0, o valor de  ║
║                 ║                   ║                                   ║ milissegundos não é exibido. Por       ║
║                 ║                   ║                                   ║ exemplo, o valor                       ║
║                 ║                   ║                                   ║ '2012-11-07T18:26:20.000' é exibido    ║
║                 ║                   ║                                   ║ como '2012-11-07T18:26:20'.            ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ -               ║ 127(6, 7)         ║ ISO8601 com fuso horário Z.       ║ aaaa-mm-ddThh:mi:ss.mmmZ (sem espaços) ║
║                 ║                   ║                                   ║                                        ║
║                 ║                   ║                                   ║ Observação: Quando o valor de          ║
║                 ║                   ║                                   ║ milissegundos (mmm) for 0, o valor de  ║
║                 ║                   ║                                   ║ milissegundos não é exibido. Por       ║
║                 ║                   ║                                   ║ exemplo, o valor                       ║
║                 ║                   ║                                   ║ '2012-11-07T18:26:20.000' é exibido    ║
║                 ║                   ║                                   ║ como '2012-11-07T18:26:20'.            ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ -               ║ 130 (1, 2)        ║ Hijri (5)                         ║ dd mmm aaaa hh:mi:ss:mmmAM             ║
║                 ║                   ║                                   ║                                        ║
║                 ║                   ║                                   ║ Neste estilo, mon representa uma       ║
║                 ║                   ║                                   ║ representação unicode Hijri de vários  ║
║                 ║                   ║                                   ║ tokens do nome completo do mês. Este   ║
║                 ║                   ║                                   ║ valor não será renderizado corretamente║
║                 ║                   ║                                   ║ em uma instalação US padrão do SSMS.   ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ -               ║ 131 (2)           ║ Hijri (5)                         ║ dd/mm/aaaa hh:mi:ss:mmmAM              ║
╚═════════════════╩═══════════════════╩═══════════════════════════════════╩════════════════════════════════════════╝
  • (1) these style values return non-deterministic results. They include all styles (aa) (without century) and a subset of styles (aaaa) (with century).
  • (2) Standard values (style0 or 100, 9 or 109, 13 or 113, 20 or 120, and 21 or 121) always return the century (yyyy).
  • (3) input when you convert to datetime; output when you convert character data.
  • (4) designed for use with XML. For conversion of datetime or smalldatetime character data of output format is as described in the previous table.
  • (5) Hijri is a calendar system with many variations. SQL Server uses the Kuwaiti algorithm.
21.06.2017 / 16:31