month
또는 day
은 한자리 수 값일 수 있습니다. 이 같은 행이 있다면 :
는
year month day
---- ----- ---
2014 7 18
당신의 방법은 2014718
로 부품 문제의 오류가 발생할 것 date
로 그것을 변환하는 후속 시도를 연결할 것입니다.
아마도 20140718
과 같은 부분을 결합하여 문제없이 date
으로 변환 할 수 있습니다. 나를 위해, 숫자 부분에서 그 형식으로 얻을 수있는 가장 쉬운 방법은 다음과 같이 이동하는 것입니다 :
그래서, 거래-SQL에서이 같은 것 : 다른 주에
CAST(CAST(year * 10000 + month * 100 + day AS char(8)) AS date)
, 나는 아마도 당신이 정말로 날짜는 물론, 그런 식으로 분할 저장해야하는지 여부를 알 수 없다, 하지만 그렇게하기를 원한다면 최소한 부품에 정수 유형을 사용하는 것을 고려하십시오. 나는 decimal(2,0)
이 2 자리 넘게 월 또는 일 값을 가질 수 없도록하는 일종의 제약 조건으로 작용할 수 있지만, 유효하지 않은 달 또는 일을 갖는 것을 방지하지 못한다는 것을 알고 있습니다. 또 다른 주요 포인트는 decimal(2,0)
은 int
보다 더 많은 저장 공간이 필요합니다. smallint
또는 tinyint
은 말할 것도 없습니다.
그래서,이 나에게 잘 보일 것입니다
year int,
month int,
day int
하지만 당신은 가능한 한 많은 저장 공간을 절약에 있다면, 당신은 또한이 시도 할 수 :
year smallint,
month tinyint,
day tinyint
을 마지막으로 만들기 위해 해당 열에서 유효하지 않은 값을 가질 수 없다면 아래처럼 체크 제약 조건을 추가하면됩니다.
ALTER TABLE tablename
ADD CONSTRAINT CK_tablename_yearmonthday CHECK
ISDATE(CAST(year * 10000 + month * 100 + day AS char(8))) = 1
;
RT 시간에? –
하드 코딩 된 숫자를 사용하여 빠른 테스트를 수행했으며 나에게 적합합니다. 따라서 "연도", "월"및 "날짜"는 숫자이며 허용되는 범위 내에 있습니까? – jimo3
@Kris - 날짜로 변환하려고하지만 datetime으로 변환하기가 쉬운 경우에도 문제가 없지만 오류가 발생합니다. – Geeme