2

我有一个旧版 SQL Server 2000 数据库,该数据库有一列的日期存储为 varchar 而不是 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 或者甚至可能是显然不是用户真实生日的东西?
4

3 回答 3

5

使用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 ...
于 2009-06-04T14:25:18.823 回答
2

检查T-SQL ISDATE() 函数

于 2009-06-04T14:26:08.650 回答
2

显示坏行:

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 ...
于 2009-06-04T14:26:56.353 回答