sql >> Database >  >> RDS >> Sqlserver

Tekenreekswaarden in een tabel bijwerken om rond te floppen, zoals YYYYMMDD-tekenreeks naar MMDDYYYY-tekenreeks

Ervan uitgaande dat onze datumkolom char . is of varchar , zou je zoiets kunnen doen

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

Of dit

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

Als u alleen maar wilt weergeven uw tekst anders, de gemakkelijkste manier is

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

Of maak een weergave en gebruik die in plaats van de originele tabel:

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

Maar als u werkelijke datum-/tijdgegevenstypes gebruikt, zullen gebruikers van uw gegevens deze toegewezen krijgen aan geschikte datum-/tijdtypes in de client en kunnen ze vervolgens kiezen hoe ze het beste kunnen worden weergegeven voor hun behoeften.

Het andere voordeel van het gebruik van datum/tijd-typen is dat ze gegevensintegriteit afdwingen . Wacht tot iemand een datum toevoegt of wijzigt om deze ongeldig te maken, bijvoorbeeld '20142331'. Wanneer u die gegevens vervolgens moet weergeven in een formulier met een maandnaam (zeg 22 januari 2014), ontstaat er hilariteit wanneer u een uitzondering krijgt die probeert het maandnummer toe te wijzen aan een maandnaam.

Als u geen datum/tijd-type gaat gebruiken, sla dan jaar, maand en dag afzonderlijk op als gehele waarden met geschikte controlebeperkingen om integriteit af te dwingen:

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


  1. Dynamische MySQL-databaseverbinding voor Entity Framework 6

  2. SQL Server 2008-versie van OVER (... Onbegrensde rijen voorafgaand)

  3. Selecteer top drie waarden in elke groep

  4. Fout van waarde <br van het type java.lang.String kan niet worden geconverteerd naar JSONObject