nvarchar를 datetime으로 캐스트 / 변환

Oct 01 2020

나는 테이블이있다 :

id   timestamp
1    31.10.2020 16:32:11
2    09.09.2020 09:15:49
3    22.04.2020 02:48:15

테이블에는 엄청난 양의 데이터가 있습니다. 열 타임 스탬프는 "nvarchar"데이터 유형입니다. 그리고 날짜별로 데이터를 정렬하거나 날짜 별 제약 조건을 위해 WHERE 절에서 사용해야하므로 "타임 스탬프"를 datetime으로 변환해야합니다. 하지만 할 수 없습니다. 변환 및 캐스팅을 시도했지만 여전히 실패했습니다.

어떤 충고?

고마워.

답변

1 Larnu Oct 01 2020 at 12:03

디자인을 수정하고 열을 날짜 및 시간 데이터 유형으로 변경합니다. 데이터가 1 ​​초까지 정확하다는 것을 고려할 때 datetime2(0)여기에 적절한 것 같습니다. 먼저 nvarchar값 의 "형식"을 ISO 형식 으로 변경해야 합니다. ISO8601 형식 (yyyy-mm-ddThh : mi : ss.mmm)을 사용하겠습니다.

UPDATE dbo.YourTable
SET [timestamp] = CONVERT(nvarchar(20),TRY_CONVERT(datetime2(0), [timestamp], 4), 126);

이제 ALTER테이블을 만들고 데이터 유형을 다음으로 변경할 수 있습니다 datetime2(0).

ALTER TABLE dbo.YourTable ALTER COLUMN [timestamp] datetime2(0) NULL;

또한 timestamp열 이름과 다른 이름을 사용하는 것이 좋습니다 . timestamp는에 대한 더 이상 사용되지 않는 동의어 rowversion이므로 사용하면 상당히 혼란 스러울 수 있습니다. 특히 rowversion날짜 및 시간 값이 아니라 binary값이며 날짜 및 시간 데이터 유형으로 변환 할 수 없습니다 .

2 GordonLinoff Oct 01 2020 at 11:57

형식 104를 datetime사용하여 명시 적으로 변환 할 수 있습니다 convert().

select convert(datetime, '31.10.2020 16:32:11', 104)