Я часто ищу имя/дату рождения, и мне очень сложно найти правильный ответ. Вы можете рассмотреть возможность сортировки с помощью функции, аналогичной приведенной ниже. В основном это займет две 8-значные даты (ГГГГММДД) и подсчитает количество несовпадающих цифр.
Например, в этих парах дат есть 1 несовпадающая цифра:
- 1976-10-20 и 1976-01-20 (10 против 1)
- 1976-10-20 и 1975-10-20 (76 против 75)
В зависимости от того, с каким объемом данных приходится иметь дело, это хорошо для сортировки (т. е. размещения наилучшего совпадения первым), но не для фильтрации (поскольку индексация не используется).
ALTER FUNCTION dbo.BirthDateRank ( @DOB1 DATE, @DOB2 DATE )
RETURNS INT
AS
BEGIN
-- 10/31/2016 --> 10312016
DECLARE @xDOB1 VARCHAR(10) = REPLACE(CONVERT(CHAR(10), @DOB1, 101), '/', '');
DECLARE @xDOB2 VARCHAR(10) = REPLACE(CONVERT(CHAR(10), @DOB2, 101), '/', '');
DECLARE @i INT = 0;
DECLARE @iRet INT = 0;
WHILE @i <= LEN(@xDOB1)
BEGIN
SET @iRet = @iRet + CASE WHEN SUBSTRING(@xDOB1, @i, 1) = SUBSTRING(@xDOB2, @i, 1) THEN 0 ELSE 1 END
SET @i = @i + 1
END
RETURN @iRet;
END;
GO
29.03.2016