Могу ли я получить список строк со значениями varchar, которые нельзя привести к дате и времени?
-
10-09-2019 - |
Вопрос
У меня есть устаревшая база данных 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 ...
Могу ли я как-нибудь:
- Получить список всех строк, в которых дату рождения нельзя преобразовать в дату и время, на случай, если я смогу это исправить?
- В тех случаях, когда я не могу восстановить значение, сделайте так, чтобы значение отображалось как 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 ...