sql >> Database teknologi >  >> RDS >> Sqlserver

Linq:Sorter efter dato, når den er gemt som tekst

Du kan tilføje en beregnet kolonne til tabellen, der vil konvertere disse strenge til datoer, hvor din diskriminator har en bestemt værdi (her har jeg lige brugt 'date' ).

ALTER TABLE Foo
ADD trueDate AS
    CASE 
        WHEN type = 'date' THEN CONVERT(date, 'mixedColumn', 101)
        ELSE NULL
    END
PERSISTED

Hvis du har tidsoplysninger, så date skal være datetime i CONVERT() funktion.

Også 101 er en stilkode, der angiver et forventet format på MM/dd/yyyy . Hvis du har noget andet, så se dette:http://msdn.microsoft .com/en-us/library/ms187928.aspx , men husk, at hvis du bruger en stil under 100, vil dit udtryk blive betragtet som ikke-deterministisk, og du kan ikke gøre din beregnede kolonne til PERSISTED , så konverteringerne vil blive udført med det samme med hver forespørgsel (det ønsker du ikke).

Den beregnede kolonne opdaterer sig selv, når rækkeværdierne ændres; ellers er værdierne vedvarende og kan forespørges på ligesom i enhver anden kolonne. Ingen udløsere påkrævet.



  1. Faktura fra flere ordrer?

  2. MySQL SELECT kun ikke null-værdier

  3. Looping gennem en given liste over værdier i PL/pgSQL

  4. Tving genindlæsning/opdatering, når du trykker på tilbage-knappen