Pergunta

Ao executar o seguinte usando uma restrição smalldatetime sobre os resultados retornados, recebo zero resultados:

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

ou

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

Mas quando usando o seguinte argumento varchar de repente eu obter resultados que correspondem a 01 janeiro de 2000. Será que smalldatetime conversão implícita não trabalho para datas mm / DD / AAAA e apenas mm datas / dd / aa?

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

Isso retorna todos os resultados para 01/01/2000 aniversários!

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)
Foi útil?

Solução

"01/01/00" é convertido com base no " ano de fechamento de dois dígitos ". Assim torna-se 01 de janeiro de 2000.

Se você enviar '1900-01-01', então o seu mostra o código que você só vai obter resultados se você tiver DOB = 01 de janeiro de 1900.

Além disso, ele está trabalhando como anunciado. A menos que você deseja executar Execute sp_proc @DateOfBirth = DEFAULT à força DOB para ser ignorado

Outras dicas

Tecnicamente, você deve estar comparando a saída:

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

para:

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

ou

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

usar um formato seguro como AAAAMMDD (sem traços)

executar estes também para ver o que acontece

select convert(smalldatetime,'19000101')
select convert(smalldatetime,'01/01/00')
select convert(smalldatetime,0)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top