Posso obter uma lista de linhas com valores varchar que não são passível de conversão para datetime?
-
10-09-2019 - |
Pergunta
Eu tenho um legado 2000 banco de dados que tem uma coluna que tem uma data que é armazenado como um varchar em vez de uma data e hora, por qualquer motivo SQL Server. Eu quero fazer uma visão contra esses dados e usar um campo de data e hora em vez de um varchar para fazer fazer um relatório contra o campo mais fácil. A boa notícia é que mais dos valores parecem que deve ser capaz de ser lançado diretamente em uma data e hora.
É claro que há, aparentemente, são alguns campos que foram inseridos de tal forma a que eles não são passível de conversão para data e hora. Apenas por uma questão de clareza, é aqui como a mesa poderia olhar:
CREATE TABLE dbo.user
(
...
birthdate varchar(10)
...
)
E a vista poderia ser algo como isto:
CREATE VIEW dbo.UserView
AS
SELECT ...
CAST(u.birthdate AS datetime) AS birthdate
...
FROM user u
WHERE ...
Existe alguma maneira eu posso:
- Obter uma lista de todas as linhas onde data de nascimento não pode ser convertido em uma data e hora no caso, posso repará-lo?
- Em casos onde não é possível reparar o valor, fazem o valor aparecem como NULL ou talvez até mesmo algo que é, obviamente, não real data de nascimento do usuário?
Solução
Use IsDate ()
SELECT birthdate, ' ' _, *
FROM user u
WHERE IsDate(u.bithdate) != 1
e
SELECT ...
CAST(CASE WHEN IsDate(u.birthdate) = 1 THEN u.birthdate ELSE NULL END AS datetime) AS birthdate
...
FROM user u
WHERE ...
Outras dicas
Verifique a função T-SQL ISDATE ()
mostrar linhas ruins:
select * from dbo.user where isdate(birthdate)!=1
o seu ponto de vista:
SELECT ...
CASE
WHEN isdate(birthdate)=1 THEN CAST(u.birthdate AS datetime)
ELSE NULL
END AS Birthday
...
FROM user u
WHERE ...