sql >> Base de Datos >  >> RDS >> Sqlserver

Actualización de valores de cadena en una tabla para que se cambien, como la cadena AAAAMMDD a la cadena MMDDYYYY

Asumiendo que nuestra columna de fecha es char o varchar , podrías hacer algo como esto

update foo
set dates = right(dates,4) + left(dates,4)

O esto

update foo
set dates = replace( convert(varchar,convert(datetime,dates,112),110) , '-' , '' )

Si todo lo que quiere hacer es mostrar tu texto de manera diferente, la forma más fácil es

select ... ,
       dates = right(dates,4) + left(dates,4)
from foo

O cree una vista y utilícela en lugar de la tabla original:

create view foo_view
as select id ,
          dates = right(dates,4) + left(dates,4)
   from foo

Pero si usa tipos de datos de fecha/hora reales, los usuarios de sus datos los asignarán a tipos de fecha/hora adecuados en el cliente y luego podrán elegir la mejor manera de mostrarlos para sus necesidades.

La otra ventaja de usar tipos de fecha/hora es que imponen integridad de datos . Espere hasta que alguien agregue o cambie una fecha para que no sea válida, por ejemplo, `20142331'. Luego, cuando necesite mostrar esos datos en un formulario con el nombre de un mes (por ejemplo, '22 de enero de 2014), se producirá una gran hilaridad cuando obtenga una excepción al intentar asignar el número de mes a un nombre de mes.

Si no va a utilizar un tipo de fecha/hora, almacene el año, el mes y el día individualmente como valores enteros con las restricciones de verificación adecuadas para hacer cumplir la integridad:

create table foo
(
  id   int not null identity(1,1) primary key ,
  yyyy int not null check ( yyyy between 1900 and 2100 ) ,
  mm   int not null check ( mm between 1 and 12 ) ,
  dd   int not null check ( dd between 1 and ( case mm
                                                 when  4 then 30
                                                 when  6 then 30
                                                 when  9 then 30
                                                 when 11 then 30
                                                 when  2 then case
                                                                when yyyy % 400 = 0 then 29
                                                                when yyyy % 100 = 0 then 28
                                                                when yyyy % 4   = 0 then 29
                                                                else                     28
                                                              end
                                                 else 31
                                               end
                                             )
                          )