En la tradición de this question ya la luz de the documentation, ¿cómo hacer esta función determinista:¿Cómo hacer conversiones de varchar a datetime deterministic?
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
O ésta (debido a los literales de cadena/hora - y sí, también he intentado '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
Solo he usado el estilo al convertir TO varchar: la documentación es un poco ambigua, pero lo probé y funciona claramente. –
@P Daddy, Amen en los literales de fecha y hora. –
Acerca de los literales de fecha y hora: ¿no puede usar el formato de indicación de fecha y hora de ODBC como {d '1990-10-02'}? Desde http://msdn.microsoft.com/en-us/library/ms187819.aspx: Las aplicaciones que usan ADO, OLE DB y API basadas en ODBC pueden usar este formato de marca de tiempo ODBC para representar fechas y horas. – Arvo