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.