我有一个遗留SQL Server2000年数据库,有一个列有一个日期,被储存作为一个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. 如果我不能修复的价值,使该价值出现空中或甚至东西是很明显 用户的真实出生日期?
有帮助吗?

解决方案

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

其他提示

显示出不良行:

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