Могу ли я получить список строк со значениями varchar, которые нельзя привести к дате и времени?

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

Вопрос

У меня есть устаревшая база данных SQL Server 2000, в которой есть один столбец с датой, которая по какой-либо причине хранится в виде varchar, а не даты и времени.Я хочу просмотреть эти данные и использовать поле даты и времени вместо 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 или, возможно, даже что-то очевидное. нет реальная дата рождения пользователя?
Это было полезно?

Решение

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

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 ...

Другие советы

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

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

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 ...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top