Question

Lors de l'exécution de ce qui suit en utilisant une contrainte smalldatetime sur les résultats renvoyés, j'obtiens zéro résultat :

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

ou

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

Mais lorsque j'utilise l'argument varchar suivant, j'obtiens tout d'un coup des résultats qui correspondent au 1er janvier 2000.La conversion implicite smalldatetime ne fonctionne-t-elle pas pour les dates mm/jj/AAAA et uniquement pour les dates mm/jj/AA ?

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

Cela renvoie tous les résultats pour les anniversaires du 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)
Était-ce utile?

La solution

"01/01/00" est converti en fonction du "année limite à deux chiffres" option.Cela devient donc le 1er janvier 2000.

Si vous envoyez « 1900-01-01 », votre code indique que vous n'obtiendrez des résultats que si vous avez DOB = 01 janvier 1900.

A part ça, ça fonctionne comme annoncé.Sauf si tu veux courir Execute sp_proc @DateOfBirth = DEFAULT pour forcer DOB à être ignoré

Autres conseils

Techniquement, vous devez comparera la sortie:

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

à:

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

ou

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

utiliser un format sûr comme AAAAMMJJ (sans tirets)

exécuter ces également pour voir ce qui se passe

select convert(smalldatetime,'19000101')
select convert(smalldatetime,'01/01/00')
select convert(smalldatetime,0)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top