답변:
@gbn에서 제안한대로 새 열을 추가하고 수동으로 업데이트 할 수 있지만 삽입 / 업데이트 트리거 또는 다른 메커니즘을 사용하여이 열을 지속적으로 최신 상태로 유지해야합니다. 테이블 / 열 이름에 대한 @gbn의 추측을 차용 한 지속적인 유지 관리가 필요하지 않은 몇 가지 방법이 있습니다.
계산 열
ALTER TABLE dbo.MyTable ADD NewIntColumn AS
CONVERT(INT, DATEDIFF(SECOND, '19000101', MyDateTimeColumn));
--or for Unix epoch
ALTER TABLE dbo.MyTable ADD NewIntColumn AS
CONVERT(INT, DATEDIFF(SECOND, '19700101', MyDateTimeColumn));
스토리지에 대한 쿼리 성능을 떨어 뜨리고이 열을 유지하고 색인을 생성 할 수 있지만 계산을 약간 변경해야합니다 (위를 유지하려고하면 계산이 결정적이지 않다는 오류가 발생 함).
ALTER TABLE dbo.MyTable ADD NewIntColumn AS
CONVERT(INT, DATEDIFF(SECOND, 0, MyDateTimeColumn)) PERSISTED;
-- or for Unix epoch
ALTER TABLE dbo.MyTable ADD NewIntColumn AS
CONVERT(INT, DATEDIFF(SECOND, 25567, MyDateTimeColumn)) PERSISTED;
쓰기 성능 (또는 스토리지)보다 읽기 성능에 더 관심이있는 경우 열을 유지하려고합니다.
전망
새 열에 대한보기의 이점 중 하나는 기본 테이블 스키마를 변경할 필요가 없다는 것입니다 (또는 최신 상태로 유지할 염려가 없습니다). 비 지속적 계산 열과 동일한 쿼리 시간에 계산 비용을 지불합니다.
CREATE VIEW dbo.vMyTable
AS
SELECT -- other columns,
MyDateTimeColumn,
NewIntColumn = DATEDIFF(...whichever calc above makes sense...)
FROM dbo.MyTable;
실행 시간
위의 계산은 지나치게 복잡하지 않으므로 쿼리에 계산을 포함하십시오. 데이터 액세스를 위해 저장 프로 시저를 사용하고 있기 때문에 자주 반복하지 않기를 바랍니다.