Estou executando uma consulta para verificar se algum registro contém um espaço em branco DateOfBirth
, mas os dados retornados não são o que eu esperava.
Eu executei o seguinte:
SELECT TOP 5 DateOfBirth, *
FROM [MyDataBase].[dbo].[CustomerRecord]
WHERE DateOfBirth = ''
Quando executo isso, meus resultados mostram linhas como esta:
EU IA | Data de Nascimento | Sobrenome |
---|---|---|
1 | 1900-01-01 | Jones |
2 | 1900-01-01 | Diácono |
6 | 1900-01-01 | Bacon |
10 | 1900-01-01 | James |
12 | 1900-01-01 | Queimaduras |
O Information_SCHEMA.Columns
mostra que a coluna é definida como date
e COLUMN_DEFAULT
é NULL
e IS_NULLABLE
está definido como YES
.
Então por que ele não retorna linhas em branco?
Você disse que DateOfBirth é um
DATE
. Então por que você está comparando-o a uma string? Não deveria. Compare datas com datas, strings com strings, etc. Não misture os tipos. Uma data nunca é igual a uma string vazia (''
), porque são duas coisas diferentes. Os resultados que você está obtendo são, portanto, um tanto arbitrários. Obviamente, o SQL Server se reserva o direito de interpretar a string vazia como igual à data 1900-01-01, o que, na minha opinião, não deveria.Uma DataDeNascimento "em branco" seria uma data NULL. Portanto:
As linhas retornadas pela sua consulta correspondem ao valor padrão de data de 1900-01-01. Quando uma string vazia é convertida implicitamente em um tipo de dado temporal, os valores padrão especificados na documentação de tipo de dado do SQL Server são usados para a comparação, conforme listado abaixo.