У нас есть функция, которая извлекает дату из первых 8 символов строки. Из-за того, как эта система была написана, пользователям говорят, что они должны ввести дату в формате 8 символов в поле. Например, 12/06/10 должно быть введено. То, как была написана исходная функция, 6 декабря 2010 года или 12 июня 2010 года, приведет к неправильной дате.
Я изменил функцию в приведенном ниже коде, чтобы исправить эту проблему, и задался вопросом, есть ли у кого-нибудь другие предложения, чтобы сделать это более пуленепробиваемым. Я предполагаю, что при возврате даты и времени всегда верна действительная дата как для 19xx, так и для 20xx. Я не уверен, что SQL использует, чтобы определить, когда использовать 19xx против 20xx, и я не беспокоюсь о датах меньше 1980 и больше 2100.
Мы все еще находимся на SQL Server 2000 для этого приложения.
Alter FUNCTION [dbo].[GetDateFromField] ( @FieldString varchar(256) )
RETURNS datetime AS
BEGIN
DECLARE @tempResult varchar(8)
SET @tempResult = left(@FieldString,8)
IF isdate(@tempResult) = 0
BEGIN
SET @tempResult = NULL
END
RETURN @tempResult
END