Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Mise à jour des valeurs de chaîne dans une table à flopper, comme la chaîne AAAAMMJJ en chaîne MMDDYYYY

En supposant que notre colonne de date est char ou varchar , vous pourriez faire quelque chose comme ça

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

Ou ceci

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

Si tout ce que vous voulez faire est afficher votre texte différemment, le plus simple est

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

Ou créez une vue et utilisez-la à la place de la table d'origine :

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

Mais si vous utilisez des types de données de date/heure réels, les utilisateurs de vos données les feront correspondre à des types de date/heure appropriés dans le client et pourront ensuite choisir la meilleure façon de les afficher en fonction de leurs besoins.

L'autre avantage de l'utilisation des types date/heure est qu'ils renforcent l'intégrité des données . Attendez que quelqu'un ajoute ou modifie une date pour la rendre invalide - par exemple, "20142331". Ensuite, lorsque vous devez afficher ces données dans un formulaire avec un nom de mois ('22 janvier 2014, par exemple), l'hilarité s'ensuivra lorsque vous obtiendrez une exception en essayant de mapper le numéro de mois à un nom de mois.

Si vous n'utilisez pas de type date/heure, stockez l'année, le mois et le jour individuellement sous forme de valeurs entières avec des contraintes de vérification appropriées pour renforcer l'intégrité :

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
                                             )
                          )