我有一个旧的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 ...
我有什么办法可以:
答案 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 ...