Как сделать SQL NOT NULL с DateTime?
Это может быть просто, но я не могу понять, как сделать простой DateTime с NOT NULL?
Я хочу сделать что-то вроде этого:
SELECT * FROM someTable WHERE thisDateTime IS NOT NULL
Но это явно не работает. Я использую MS SQL 2005, если это имеет значение. Спасибо.
Ответы
Ответ 1
Он работает? Я только что протестировал его?
/****** Object: Table [dbo].[DateTest] Script Date: 09/26/2008 10:44:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[DateTest](
[Date1] [datetime] NULL,
[Date2] [datetime] NOT NULL
) ON [PRIMARY]
GO
Insert into DateTest (Date1,Date2) VALUES (NULL,'1-Jan-2008')
Insert into DateTest (Date1,Date2) VALUES ('1-Jan-2008','1-Jan-2008')
Go
SELECT * FROM DateTest WHERE Date1 is not NULL
GO
SELECT * FROM DateTest WHERE Date2 is not NULL
Ответ 2
Просто, чтобы исключить возможность - она, похоже, не имеет ничего общего с опцией ANSI_NULLS
, поскольку она контролирует сравнение с NULL с операторами =
и <>
. IS [NOT] NULL
работает ли ANSI_NULLS
ON
или OFF
.
Я также пробовал это против SQL Server 2005 с isql
, потому что ANSI_NULLS
по умолчанию используется OFF
при использовании DB-Library.
Ответ 3
Я столкнулся с этой проблемой, когда следующий запрос не работает должным образом:
select 1 where getdate()<>null
мы ожидаем, что он покажет 1, потому что getdate() не возвращает null.
Я предполагаю, что это имеет какое-то отношение к тому, что SQL не может отличить null как datetime и пропустить строку!
конечно, мы знаем, что мы должны использовать ключевые слова IS или IS NOT для сравнения переменной с нулем, но при сравнении двух параметров трудно справиться с нулевой ситуацией.
в качестве решения вы можете создать свою собственную функцию сравнения, например:
CREATE FUNCTION [dbo].[fnCompareDates]
(
@DateTime1 datetime,
@DateTime2 datetime
)
RETURNS bit
AS
BEGIN
if (@DateTime1 is null and @DateTime2 is null) return 1;
if (@DateTime1 = @DateTime2) return 1;
return 0
END
и запишите запрос следующим образом:
select 1 where dbo.fnCompareDates(getdate(),null)=0