DB/MSSQL 4

여러 행 컬럼 합치기 STUFF

SQL Server에서 여러 행(Row)의 컬럼 값을 하나로 합치기 위해서는 STUFF 함수와 FOR XML PATH 구문을 사용한다. 오라클에서 XMLAGG, WM_CONCAT, LISTAGG 함수와 비슷한 기능을 수행한다. SQL Server 2017 이상 버전을 사용한다면 STRING_AGG 함수를 사용하면 된다. SELECT a.job , STUFF((SELECT ',' + ename FROM emp WHERE job = a.job FOR XML PATH('') ), 1, 1, '') AS enames FROM emp AS a GROUP BY a.job STUFF() 함수는 문자열을 자리수 만큼 특정문자로 치환하고 문자열로 리턴한다. XML로 리턴된 결과의 첫번재 문자 ','을 빈문자로 치환하고 ..

DB/MSSQL 2023.01.12

MSSQL 한글 깨짐

MSSQL의 테이블 데이터가 한글일 경우에는 컬럼의 DataType을 nvarchar로 해야된다고 한다. varchar 와 nvarchar를 비교하자면 varchar 는 영문데이터와 테이블에 설정된 기본 언어 타입을 사용. nvarchar는 유니코드를 지원을 위한 데이터 형이란다...(단점은 varchar보다 동일한 데이터 저장시 2배의 공간을 사용함.) 1. 한글이 포함되는 필드의 dateType 확인 (nvarchar) 2. insert 혹은 select 시에 nvarchar 형의 값은 다음과 같이 사용 insert into [테이블](칼럼) values (N'한글') select * from [테이블] where [칼럼] LIKE N'%한글%' 3. 기본 언어 확인 select @@LANGUAGE ..

DB/MSSQL 2022.10.13

datetime, datetime2 차이점

datetime 날짜와 시간 표시 1953년 1월 1일부터 가능. [년-월-일 시:분:초.123] // [2019-04-26 09:00:00.007] 8Byte 1953년 이전의 날짜를 저장하지 못하며(에러 발생), 초 이하의 정확도가 떨어짐. .000, .003 또는 .007초 단위로 반올림 SQL표준에 맞지 않고, 정확도가 떨어져서 공식문서에서는 비권장 datetime2 [년-월-일 시:분:초[.100ns]], [YYYY-MM-DD hh:mm:ss[.소수자릿수 초]] // [2019-04-26 09:00:00.1234567] 자릿수가 3보다 작은 경우 6Byte 자릿수가 3 또는 4인 경우 7Byte 기타 8Byte SQL Server 2008부터 지원

DB/MSSQL 2022.09.02