2014-01-29 6 views
0

Как вы можете искать даты (даты), которые содержат значение по умолчанию i.e. ''. Я думаю, это не так:Значение по умолчанию для datetime

select * from table where dateofbirth='' 

Все даты, похоже, имеют значение по умолчанию '1900-01-01'. Тем не менее, в моей базе данных есть люди, у которых есть дата рождения до или до этой даты (главным образом, в основном). Поэтому я не могу:

select * from table where dateofbirth='1900-01-01' 

Я знаю, что некоторые версии SQL Server имеют дату по умолчанию: 1899-12-31.

Я думаю, что лучше использовать нули для неизвестных дат. В этом случае я не могу этого сделать.

Я прочитал множество вопросов здесь о поиске дат с использованием SQL, но я не нашел ответа на свой конкретный вопрос.

+1

' '' 'не является допустимым' datetime' –

ответ

0

Лучшее, что вы собираетесь получить то, что вы перечислили:

select * from table where dateofbirth='1900-01-01' 

Как вы знаете, проблема в том, что если кто-то действительно родился 1/1/1900, вы также включить их. Но для вашего запроса действительно нет способа узнать разницу.

Чтобы исправить это, вам нужно будет изменить то, что использует ваша система для значения по умолчанию (например, NULL или изменить дату и время datetime и использовать 1/1/0001). Затем обновите все ваши значения 1/1/1900 до нового значения по умолчанию. Да, это будет ошибочно обновлять любых существующих людей с днями рождения 1/1/1900, но, по крайней мере, это предотвратит любые будущие события.

0

В терминах SQL Server значение по умолчанию для столбца X используется только в том случае, если новая запись впервые создана, а значение для этого столбца не указано. После первоначального создания записи значение является просто значением, таким же, как и любое другое. В одной таблице нет возможности различать записи, которые хранят значение по умолчанию в столбце X, потому что оно было предоставлено, или потому, что оно было дефолтом.

Это не поможет вам сейчас, но альтернативой нулям, которые иногда используются, является использование «магического значения». В случае дат рождения максимальное значение даты и времени 31 декабря 9999 года может использоваться для указания неизвестного значения (если ваша система не используется в течение 8 000 лет :) Некоторые люди (включая меня) действительно одобряю использование магических значений, потому что в базе данных нет способа указать их магический статус.

Rhys

0

Вы можете получить значение DateTime по умолчанию, как;

SELECT CONVERT(DATETIME, 0) 

И примените его к фильтру, если необходимо;

SELECT * FROM [Table] WHERE DateOfBirth = CONVERT(DATETIME, 0) 

Или, если вам нужно выбрать более ранние даты;

SELECT * FROM [Table] WHERE DateOfBirth <= CONVERT(DATETIME, 0) 

Fiddle example

Смежные вопросы