Dans la tradition de this question et à la lumière de the documentation, comment peut-on faire cette fonction déterministe:Comment rendre les conversions de varchar à datetime déterministe?
ALTER FUNCTION [udf_DateTimeFromDataDtID]
(
@DATA_DT_ID int -- In form YYYYMMDD
)
RETURNS datetime
WITH SCHEMABINDING
AS
BEGIN
RETURN CONVERT(datetime, CONVERT(varchar, @DATA_DT_ID))
END
Ou celui-ci (à cause des littéraux chaîne/date - et oui, j'ai aussi essayé « 1900 -01-01'):
ALTER FUNCTION udf_CappedDate
(
@DateTimeIn datetime
)
RETURNS datetime
WITH SCHEMABINDING
AS
BEGIN
IF @DateTimeIn < '1/1/1900'
RETURN '1/1/1900'
ELSE IF @DateTimeIn > '1/1/2100'
RETURN '1/1/2100'
RETURN @DateTimeIn
END
J'ai seulement utilisé le style lors de la conversion de TO varchar - la documentation est un peu ambiguë, mais je l'ai essayé et cela fonctionne clairement. –
@P Papa, Amen sur les littéraux datetime. –
A propos des littéraux datetime: ne pouvez-vous pas utiliser le format d'horodatage ODBC comme {d '1990-10-02'}? À partir de http://msdn.microsoft.com/en-us/library/ms187819.aspx: Les applications qui utilisent les API ADO, OLE DB et ODBC peuvent utiliser ce format timestamp ODBC pour représenter les dates et les heures. – Arvo