我可以获取varchar值不能转换为datetime的行列表吗?

时间:2009-06-04 14:23:17

标签: sql-server datetime sql-server-2000 casting varchar

我有一个旧的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 个答案:

答案 0 :(得分: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 ...

答案 1 :(得分:2)

答案 2 :(得分: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 ...