반응형

varchar와 nvarchar은 SQL Server에서 문자열 데이터를 저장하는 데 사용되는 두 가지 주요 데이터 형식입니다. 주된 차이점은 문자열의 저장 방식과 처리 방법에 있습니다.

  1. 저장 방식:
    • varchar: ASCII 문자셋을 사용하여 문자열을 저장합니다. 한글이나 다국어 문자를 저장할 수 있지만, 해당 문자셋에 따라 저장 용량이 다를 수 있습니다.
    • nvarchar: 유니코드 문자셋(UTF-16)을 사용하여 문자열을 저장합니다. 모든 문자를 표현할 수 있으며, 다양한 언어 및 문자에 대한 지원이 내장되어 있습니다. 하지만 저장 용량이 더 크게 필요할 수 있습니다.
  2. 저장 공간:
    • varchar: 저장 공간을 ASCII 문자셋에 맞게 할당합니다. 따라서 한글이나 다국어 문자의 경우에는 두 글자당 2바이트가 아닌 1바이트만 사용합니다.
    • nvarchar: 고정된 2바이트의 저장 공간을 사용합니다. 모든 문자가 2바이트로 저장되므로 저장 공간이 더 큽니다.
  3. 검색 성능:
    • varchar: ASCII 문자셋을 사용하므로, 해당 문자셋으로 제한된 환경에서는 저장 공간 측면에서 더 효율적일 수 있습니다.
    • nvarchar: 유니코드 문자셋을 사용하므로 저장 공간이 더 크며, 이로 인해 저장 및 검색 성능이 더 느릴 수 있습니다.
  4. 사용 사례:
    • ASCII 문자만 다루는 경우나 저장 공간이 중요한 경우에는 varchar를 고려할 수 있습니다.
    • 다국어 문자 또는 유니코드 문자를 다뤄야 하는 경우에는 nvarchar를 사용해야 합니다.

일반적으로, 다국어 문자를 다루거나 유니코드 문자셋이 필요한 경우에는 nvarchar를 사용하는 것이 권장됩니다. 하지만 저장 공간이나 특정한 문자셋의 경우에는 varchar를 고려할 수 있습니다.

반응형
반응형

[MSSQL] 테이블 정보 확인

 

테이블 컬럼 정보 확인

select * from information_schema.columns

where table_name = ''

 

테이블 제약조건 확인 

select

*

from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE

where table_name = ''

 

테이블 인덱스 확인 확인 

SELECT * FROM sys.dm_db_index_physical_stats

 

반응형
반응형

[MSSQL] CHARINDEX 두개의 문자 에서 문자 찾기 

 

CHARINDEX(Transact-SQL)

이 함수는 두 번째 문자 식 내에서 하나의 문자 식을 찾고, 있는 경우 첫 번째 식의 시작 위치를 반환합니다.

 

DECLARE @document VARCHAR(64);  
SELECT @document = 'Reflectors are vital safety' +  
                   ' components of your bicycle.';  
SELECT CHARINDEX('bicycle', @document);  



-----------   
48

 

반응형
반응형

 

-- ROW_NUMBER 함수를 사용할 때는 ORDER BY를 필수로 사용해야하는데, 의미없는 (SELECT 1)을 부여하여 ORDER BY 없이 조회된 결과의 순번을 부여한다.


SELECT ROW_NUMBER() OVER(ORDER BY sal DESC) AS rownum
     , ename
     , job
     , sal
  FROM emp
 WHERE sal > 2000

-- ORDER BY에 정렬 컬럼을 사용하면 정렬 후 순번이 부여된다.

SELECT ROW_NUMBER() OVER(ORDER BY sal DESC) AS rownum
     , ename
     , job
     , sal
  FROM emp
 WHERE sal > 2000

반응형
반응형

 

 

 

1. 테이블의 생성과 동시에 데이터까지 모두 복사하는 방법

 

SELECT * INTO [생성할 테이블명 ] FROM [원본 테이블명]

기본적으로 테이블과 동시에 데이터까지 복사하는 방법이다.  

 

2. 테이블을 생성할 때 원하는 컬럼만 복사하는 방법

 

SELECT [원하는 컬럼명] INTO [생성할 테이블명 ] FROM [원본 테이블명]

내가 원하는 컬럼만 복사하여 테이블을 만들때 간단하게 해결이 가능하다. 

 

3. 테이블을 생성할 때 테이블 구조만 복사하는 방법

 

SELECT * INTO [생성할 테이블명 ] FROM [원본 테이블명] WHERE  1=2

테이블을 복사할 때 테이블에서 테이터는 없이 테이블 구조만 복사할 때는 'WHERE  1=2'와 같은 쿼리를 실해시키면 테이블의 구조만 복사할 수 있다.

 

4. 테이블은 이미 있고 데이터만 복사하는 방법

 

INSERT INTO [ 데이터를 넣을 테이블명 ] SELECT * FROM [원본 테이블명]

테이블은 이미 있고 그 테이블에 데이터만 복사하고 싶을 경우에는 위와 같은 방법으로 데이터를 넣을 수 있다. 

 

5. 이를 응용해보면 아주 유용하게 사용할 수 있다.

 

INSET INTO [데이터를 넣을 테이블명](컬럼1, 컬럼2) SELECT 복사할 컬럼1, 복사할 컬럼2 FROM [원본 테이블명] GROUP BY 컬럼1

출처: https://dongpal.tistory.com/10 [dongpal's story:티스토리]

반응형
반응형

※ CHARINDEX() 함수와 SUBSTRING함수를 이용한 분리

DECLARE @DATA VARCHAR(MAX), @separator CHAR, @substring varchar(max), @dividepos INT, @tot_cnt int

set @data = 'a,bb,ccc,ddd,eeeee,ffffff,gggggggg,hhhhhh,iiiiiiiii' 
set @separator = ','
set @dividepos = CHARINDEX(@separator, @data)
set @tot_cnt = 0

while @dividepos <> 0 or len(@data) > 0
begin
set @dividepos = CHARINDEX(@separator,@data)
if( @dividepos = 0 )
begin
set @substring = @data
set @data = ''
end
else
begin
select @substring = SUBSTRING(@data,1,@dividepos - 1)
set @data = SUBSTRING(@data, @dividepos +1, len(@data))
end 
set @tot_cnt = @tot_cnt + 1

-- select @substring, @tot_cnt

end

 

---※ CHARINDEX() 함수와 SUBSTRING함수를 이용한 분리

DECLARE @DATA VARCHAR(MAX), @separator CHAR, @substring varchar(max), @dividepos INT, @tot_cnt int

set @data = 'a,bb,ccc,ddd,eeeee,ffffff,gggggggg,hhhhhh,iiiiiiiii' 
set @separator = ','
set @dividepos = CHARINDEX(@separator, @data)
set @tot_cnt = 0

while @dividepos <> 0 or len(@data) > 0
begin
	set @dividepos = CHARINDEX(@separator,@data)
	if( @dividepos = 0 )
	begin
		set @substring = @data
		set @data = ''
	end
	else
	begin
		select @substring = SUBSTRING(@data,1,@dividepos - 1)
		set @data = SUBSTRING(@data, @dividepos +1, len(@data))
	end 
	set @tot_cnt = @tot_cnt + 1

	-- select @substring, @tot_cnt

end
반응형
반응형

 

[MSSQL] MSSQL Insert 실행시 자동증가되는 IDENTITY값 바로 가져오기

 

SELECT @@IDENTITY




INSERT INTO T_AUTH ( VAL1 ,VAL2 ,VAL3)
values( #{VAL1} ,#{VAL2} ,#{VAL3}) 

SELECT @@IDENTITY AS SEQ
반응형
반응형

SQL Server 2008, SQL Server 2012

 

문자(VARCHAR)를 숫자형식(타입)으로 변경하는 방법을 소개한다.

numeric decimal 타입은 소수점 이하 값을 반올림한다.

int, float 타입 보다는 numeric decimal 타입을 사용할 것을 권장하며 그 중에서도

decimal 타입을 사용할 것을 권장 한다고 한다.

 

<숫자형>

int : 정수

float : 부동소수점

numeric : 실수

decimal : 실수 (numeric 동일)

 

numeric( [전체길이(소수점이하포함)], [소수점이하길이] )

decimal( [전체길이(소수점이하포함), [소수점이하길이] )

 

문자 -> 숫자 변환

CONVERT( [숫자형], [] )

 

SELECT CONVERT(int, '12')
           , CONVERT(float, '12.54321')
           , CONVERT(numeric, '12.54321')
           , CONVERT(numeric(6,4), '12.54321')
           , CONVERT(decimal(6,4), '12.54321')

--결과 1 : 12
--결과 2 : 12.54321
--결과 3 : 13
--결과 4 : 12.5432
--결과 5 : 12.5432
반응형

+ Recent posts