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

Jas*_*ker 2 sql-server datetime varchar casting sql-server-2000

我有一个遗留的SQL Server 2000数据库,其中有一列具有一个日期,无论出于何种原因,该日期都存储为varchar而不是datetime.我想对这些数据进行查看,并使用datetime字段而不是varchar来更轻松地对字段进行报告.好消息是,大多数值看起来应该能够直接投射到日期时间.

当然,显然有一些字段以这样的方式输入,即它们不能转换为日期时间.为了清楚起见,这是表格的外观:

CREATE TABLE dbo.user
(
    ...
    birthdate varchar(10)
    ...
)
Run Code Online (Sandbox Code Playgroud)

视图看起来像这样:

CREATE VIEW dbo.UserView
AS
SELECT ...
       CAST(u.birthdate AS datetime) AS birthdate
       ...
FROM user u
WHERE ...
Run Code Online (Sandbox Code Playgroud)

有什么办法可以:

  1. 获取生日日期不能投入日期时间的所有行的列表,以防我可以修复它?
  2. 在我无法修复该值的情况下,使值显示为NULL或者甚至可能是显然不是用户的真实生日的东西?

Joe*_*orn 5

使用IsDate()

SELECT birthdate, ' ' _, *
FROM user u
WHERE IsDate(u.bithdate) != 1
Run Code Online (Sandbox Code Playgroud)

SELECT ...
   CAST(CASE WHEN IsDate(u.birthdate) = 1 THEN u.birthdate ELSE NULL END AS datetime) AS birthdate
   ...
FROM user u
WHERE ...
Run Code Online (Sandbox Code Playgroud)