datetime으로 변환할 수 없는 varchar 값이 있는 행 목록을 얻을 수 있습니까?
-
10-09-2019 - |
문제
어떤 이유로든 날짜/시간 대신 varchar로 저장된 날짜가 있는 열이 하나 있는 레거시 SQL Server 2000 데이터베이스가 있습니다.이 데이터에 대한 뷰를 만들고 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 ...
내가 할 수 있는 방법이 있나요?
- 복구할 수 있는 경우를 대비해 생년월일을 날짜/시간으로 변환할 수 없는 모든 행의 목록을 얻으시겠습니까?
- 값을 복구할 수 없는 경우 값이 NULL로 표시되도록 하거나 심지어는 분명히 ~ 아니다 사용자의 실제 생년월일은 무엇입니까?
해결책
사용 날짜()
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 ...
다른 팁
을 체크 해봐 T-SQL ISDATE() 함수
잘못된 행 표시:
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 ...
제휴하지 않습니다 StackOverflow