안녕하세요.
기존 오라클에서 사용중인 문장입니다.
TO_CHAR(SYSDATE,'YYMMDD')||LPAD(TEST.NEXTVAL,4,0)
이것을 MSSQL 변경하고자 합니다.
문제는 오라클에서는 TEST.NEXTVAL 이라고 하여 자동으로 증가되도록 되어 있는데.
MSSQL에서 TEST.NEXTVAL 자동증가 값을 이용하지 못하고 수작업으로 해야 할것 같습니다.
while 문으로 한번에 200~ 300 건의 데이터를 처리 해야 합니다.
테이블
CREATE TABLE AAA(
BBB VARCHAR(10) NOT NULL,
CCC VARCHAR(500)
PRIMARY KEY(BBB)
}
입력데이터 예
1703140001
1703140002 ....
1703150001
1703150002
1703150003....
년월일 6자리와 넘버링4자리로 데이터를 넣어 주고자 합니다.
년월일이 변경되면 4자리의 넘버링은 0001부터 다시 시작하는 방법을 할려고 하는
좋은 방법이 있으면 부탁 드리겠습니다.
Comment 3
-
후니블루
2017.03.15 09:33
-
카밀
2017.03.16 15:10
그저 답찾기에 급급하게 시도해보았습니다. 성능은 좋지 않을거 같습니다..
drop table [dbo].[NUMBER]
CREATE TABLE [dbo].[NUMBER](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[NUMBER] char(12)
)
insert into [dbo].[NUMBER](NUMBER)
select convert(varchar(8),GETDATE(),12)
+REPLICATE('0',4-LEN(count(*)+1))
+CONVERT(varchar(4),COUNT(*)+1)
from NUMBER
where LEFT(number,6)=convert(varchar(8),GETDATE(),12)
select * from [dbo].[NUMBER]
declare @i int =0
while (@i<1000)
begin
insert into [dbo].[NUMBER](NUMBER)
select convert(varchar(8),GETDATE(),12)
+REPLICATE('0',4-LEN(count(*)+1))
+CONVERT(varchar(4),COUNT(*)+1)
from NUMBER
where LEFT(number,6)=convert(varchar(8),GETDATE(),12)
set @i=@i+1
end
-
호짱
2017.03.17 14:00
답변 감사드립니다.저두 비슷한 방식으로 구했습니다.AAA 라는 테이블에 사용자 정보 데이터가 있으니까. Rank를 이용하여 10자리의 KEY 값을만들었습니다.SUBSTRING(CONVERT(VARCHAR(10), GETDATE(), 112), 3, LEN(CONVERT(VARCHAR(10), GETDATE(), 112))) +REPLICATE('0',4 - LEN(RANK() OVER (ORDER BY A_1 ) + '%d' )) + CONVERT(VARCHAR(4), RANK() OVER (ORDER BY A_1 ) + '%d') AS KKKYYMMDD의 값을 먼저 구한 후숫자 4자리를 Rank를 이용하여 만들었습니다.일단위가 바뀌면 항상 초기화 되게 하였구요..참고로.%d는 YYMMDD에 Max값을 찾아서 숫자를 대입하도록 했습니다.SUBSTRING(CONVERT(VARCHAR(10), GETDATE(), 112), 3, LEN(CONVERT(VARCHAR(10), GETDATE(), 112)))대신convert(varchar(8),GETDATE(),12) 이게 더 간단하군요..또 하나 배워 갑니다.
MS SQL에도 Sequence 사용할 수 있습니다.