Могу ли я получить список строк со значениями varchar, которые нельзя преобразовать в datetime? - PullRequest
2 голосов
/ 04 июня 2009

У меня есть устаревшая база данных SQL Server 2000, в которой есть один столбец с датой, которая по какой-либо причине хранится в виде varchar вместо datetime. Я хочу просмотреть эти данные и использовать поле datetime вместо varchar, чтобы упростить создание отчета по этому полю. Хорошей новостью является то, что большинство значений выглядят так, как будто они могут быть преобразованы непосредственно в дату / время.

Конечно, очевидно, есть некоторые поля, которые были введены таким образом, что их нельзя преобразовать в дату и время. Ради ясности, вот как может выглядеть стол:

CREATE TABLE dbo.user
(
    ...
    birthdate varchar(10)
    ...
)

И вид может выглядеть примерно так:

CREATE VIEW dbo.UserView
AS
SELECT ...
       CAST(u.birthdate AS datetime) AS birthdate
       ...
FROM user u
WHERE ...

Есть ли способ, которым я могу:

  1. Получить список всех строк, в которых дата рождения не может быть преобразована в дату и время, если я могу исправить это?
  2. В случаях, когда я не могу восстановить значение, сделать так, чтобы значение отображалось как NULL или, может быть, даже что-то, что явно не реальная дата рождения пользователя?

Ответы [ 3 ]

5 голосов
/ 04 июня 2009

Использовать IsDate ()

SELECT birthdate, ' ' _, *
FROM user u
WHERE IsDate(u.bithdate) != 1

и

SELECT ...
   CAST(CASE WHEN IsDate(u.birthdate) = 1 THEN u.birthdate ELSE NULL END AS datetime) AS birthdate
   ...
FROM user u
WHERE ...
2 голосов
/ 04 июня 2009

показать плохие строки:

select * from dbo.user where isdate(birthdate)!=1

ваш взгляд:

SELECT ...
    CASE
        WHEN isdate(birthdate)=1 THEN CAST(u.birthdate AS datetime)
        ELSE NULL
    END AS Birthday
       ...
FROM user u
WHERE ...
2 голосов
/ 04 июня 2009

Проверьте функцию T-SQL ISDATE ()

...