【问题标题】:SQL: search for null dateSQL:搜索空日期
【发布时间】:2014-03-26 18:51:28
【问题描述】:

我有一个搜索我的成员表的选择过程。 成员表有:

ID – Name –  Deleted
 1 – Marcus – NULL
 2 – Regina – 2014-03-26 09:33:00.000

存在:ID 一个 PK int no NULL,命名一个 varchar(250) 并删除了一个 datetime NULL。

这是我的程序:

CREATE PROCEDURE dbo.SELECT_MEMBERS

    @ID int = NULL,
    @Name varchar(250)= NULL,
    @Deleted datetime =NULL

AS
BEGIN
 IF @Deleted = ''
        BEGIN
            SET @Deleted = NULL
        END     
        ELSE 
        BEGIN
            SET @Deleted = @Deleted
        END

 SET NOCOUNT ON;

    SELECT  ID, Name, Deleted 
    FROM dbo.Members WHERE
       (@ID IS NULL OR @ID = ID)
   AND (@Name IS NULL OR @Name = Name)
   AND (@Deleted IS NULL OR @Deleted = Deleted)


END
GO 

为了搜索没有删除日期的成员(如果他们有删除日期意味着他们不是活跃成员)我这样做:

EXEC dbo.SELECT_MEMBERS  @Deleted = ''

但这不起作用,因为我插入了已删除日期的行。

我做错了什么?

非常感谢!!

【问题讨论】:

    标签: sql sql-server datetime select null


    【解决方案1】:
    CREATE PROCEDURE dbo.SELECT_MEMBERS
    
        @ID int = NULL,
        @Name varchar(250)= NULL,
        @Deleted datetime =NULL
    
    AS
    BEGIN
    
     SET NOCOUNT ON;
    
        SELECT  ID, Name, Deleted 
        FROM dbo.Members 
        WHERE ID = ID
        AND ISNULL(@Name, '') = ISNULL(Name, '')
        AND ISNULL(@Deleted, '') = ISNULL(Deleted, '')
    
    
    END
    GO 
    

    【讨论】:

      【解决方案2】:

      您似乎希望@Deleted 日期的空/NULL 值与NULL@ID@Name 的行为不同:您希望@Deleted 的实际比较为真仅当值为NULL 时。

      我想你想要这样的东西:

      CREATE PROCEDURE dbo.SELECT_MEMBERS
          @ID int = NULL,
          @Name varchar(250)= NULL,
          @Deleted datetime = NULL
      AS
      BEGIN
         SELECT ID, Name, Deleted 
         FROM dbo.Members
         WHERE (@ID IS NULL OR @ID = ID) AND
               (@Name IS NULL OR @Name = Name) AND
               ((@Deleted IS NULL  OR @Deleted = Deleted or @Deleted = '' and Deleted is null)
      END;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-26
        • 1970-01-01
        • 2014-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多