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

Asked

Viewed 2,401 times

0

I have a view with a varchar type column and I want to convert this column to a date time type 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 make the mistake. Someone knows how to help me in this regard please?

  • Which database?

  • Thank you for answering Camilo. is Sql server

  • cast(data as datetime)

  • @Marconi can tell me the specific function of this "CAST" and tbm would like to know using this which type of format will give me?

  • the cast will return what is after "as", with this will give you datetime

  • @Kelvin convert (datetime,data) without the '101' works too. Take a look CAST

  • @Marconi tried to make this way update temp_vertical_dashboard set data = Convert(datetime,data) and gave me Message 4406, Level 16, State 1, Line 3 Failed to update or insert the display or function 'temp_vertical_dashboard' because it contains a derived or constant field.

  • Thanks @Emerson for the explanation I’ll tbm go deep a little researching on this.

  • So far everything I’ve tried makes this message appear:Ç Message 4406, Level 16, Status 1, Line 3 Failed to update or insert the display or 'temp_vertical_dashboard' function because it contains a derived or constant field.

  • @Kelvin asked a question here about: https://answall.com/questions/214275/qual-a-diferen%C3%A7a-entre-cast-e-convert

  • @Marconi good! I will see the staff’s response to have more ideá on the subject

  • See this Sopt

  • @Ivan Ferrer, which parameter do I pass inside getdate()? and this query will only list,but I need you to update by converting my column from varchar to datetime. Maybe I explained wrong

Show 8 more comments

1 answer

1


Everything will depend on the format of your date. With format 101 you are specifying which 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 must use code 103 for the conversion:

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

SELECT CONVERT(DATETIME, @data, 103);

You cannot update directly to your view, then 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 documentation CAST and CONVERT (Transact-SQL) - Date and time styles check the codes corresponding to the date conversions.

Conversions available:

╔═════════════════╦═══════════════════╦═══════════════════════════════════╦════════════════════════════════════════╗
║ 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 nondeterministic results. Include all styles (aa) (no century) and a subset of styles (aaaa) (with century).
  • (2) The 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 XML use. For conversion of datetime or smalldatetime output format character data is as described in the previous table.
  • (5) Hijri is a calendar system with many variations. SQL Server uses the Kuwaiti algorithm.
  • Once again Thank you You saved my day!!!!!

  • Another @Sorack.se question based on this query here ALTER VIEW temp_vertical_dashboard AS ( SELECT CONVERT(DATETIME, t.data, 101) AS data FROM table t ) it will convert the field to tupo date but will delete all columns from my view and how to update it only in this field and not delete other fields that already exists please?

  • @Kelvin Just put another name to the field after the clause AS

  • Thanks @Sorack turned out all right

Browser other questions tagged

You are not signed in. Login or sign up in order to post.