문제

어떤 이유로든 날짜/시간 대신 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 ...

내가 할 수 있는 방법이 있나요?

  1. 복구할 수 있는 경우를 대비해 생년월일을 날짜/시간으로 변환할 수 없는 모든 행의 목록을 얻으시겠습니까?
  2. 값을 복구할 수 없는 경우 값이 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 ...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top