Вопрос

При выполнении следующего с использованием ограничения smalldatetime для возвращаемых результатов я получаю нулевые результаты:

Execute sp_proc @DateOfBirth =   '01/01/1900' 

или

Execute sp_proc @DateOfBirth =   '1900-01-01' 

Но при использовании следующего аргумента varchar я внезапно получаю результаты, соответствующие 1 января 2000 года.Неявное преобразование smalldatetime не работает для дат мм/дд/ГГГГ и только для дат мм/дд/ГГ?

Execute sp_proc @DateOfBirth =   '01/01/00' 

Это возвращает все результаты для дней рождения 01.01.2000!

CREATE PROCEDURE [dbo].[sp_proc] 
    -- Add the parameters for the stored procedure here

    @DateOfBirth SmallDateTime = null 

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT *
    FROM
        view_People
    WHERE
        FirstName LIKE '%' + IsNull(@FName ,FirstName) + '%'
    AND
        LastName LIKE '%' + IsNull(@LName,LastName) + '%'
    AND
        DOB = IsNull(@DateOfBirth,DOB) 
    AND
        SSN = IsNull(@SSN,SSN)
Это было полезно?

Решение

«01.01.00» преобразуется на основе «двухзначное отсечение года" вариант.Итак, это будет 01 января 2000 года.

Если вы отправите «1900-01-01», ваш код покажет, что вы получите результаты только в том случае, если у вас есть дата рождения = 01 января 1900 года.

В остальном, он работает так, как заявлено.Если только ты не хочешь бежать Execute sp_proc @DateOfBirth = DEFAULT чтобы заставить DOB игнорироваться

Другие советы

Технически, вы должны сравнивать результаты:

Execute sp_proc @DateOfBirth =   '01/01/00'

к:

Execute sp_proc @DateOfBirth =   '01/01/2000'

или

Execute sp_proc @DateOfBirth =   '2000-01-01'

используйте безопасный формат, например ГГГГММДД (без тире).

запустите их также, чтобы посмотреть, что произойдет

select convert(smalldatetime,'19000101')
select convert(smalldatetime,'01/01/00')
select convert(smalldatetime,0)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top