Posso obter uma lista de linhas com valores varchar que não são passível de conversão para datetime?

StackOverflow https://stackoverflow.com/questions/950926

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:

  1. 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?
  2. 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?
Foi útil?

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 ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top