W tradycji this question iw świetle the documentation, w jaki sposób można uczynić tę funkcję deterministycznego:Jak dokonać konwersji z varchar na deterministyczny datetime?
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
albo to jeden (ze względu na ciąg/data literały - i tak, ja też próbowałem „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
Używałem tego stylu tylko przy konwersji na varchar - dokumentacja jest niejasna, ale próbowałem ją i wyraźnie działa. –
@P Daddy, Amen na literałach datetime. –
Informacje o literałach datetime - czy nie możesz użyć formatu datownika ODBC, np. {D '1990-10-02'}? Z http://msdn.microsoft.com/en-us/library/ms187819.aspx: Aplikacje korzystające z interfejsów API ADO, OLE DB i ODBC mogą używać formatu datownika ODBC do przedstawiania dat i godzin. – Arvo