문자열에서 숫자만 추출하기 (스칼라 반환 함수)
포스팅 개요
문자열에 포함된 숫자만 추출하는 함수입니다. 실행 시 '스칼라 반환 함수'로 생성되어 필요할 때마다 쉽게 적용이 가능하며 주로 보이는 그대로 저장된 금액(1,999,999), 일자(2023년 1월 1일) 등의 형식이 표함 된 숫자를 계산하기 위해 사용합니다.
예제 쿼리
먼저 사용할 데이터베이스에 다음의 쿼리를 실행합니다.
-- 문자열에서 숫자만 뽑아내는 사용자 함수
CREATE FUNCTION [dbo].[fn_GetNumInString]
(
@icur_num VARCHAR(50)
)
RETURNS INT
AS
BEGIN
DECLARE @i INT
DECLARE @temp_num VARCHAR(50)
SET @temp_num = ''
SET @icur_num = REPLACE(@icur_num, '.', '')
SET @icur_num = REPLACE(@icur_num, '+', '')
SET @icur_num = REPLACE(@icur_num, '-', '')
SET @icur_num = REPLACE(@icur_num, '\', '')
SET @icur_num = REPLACE(@icur_num, '$', '')
SET @icur_num = REPLACE(@icur_num, ',', '')
SET @i = 1
WHILE @i <= LEN(@icur_num)
BEGIN
IF ISNUMERIC(SUBSTRING(@icur_num, @i, 1)) = 1
BEGIN
SET @temp_num = @temp_num + SUBSTRING(@icur_num, @i, 1)
END
SET @i = @i + 1
END
IF ISNUMERIC(@temp_num) = 0
SET @temp_num = 0
IF @temp_num = ''
SET @temp_num = 0
RETURN CAST(@temp_num AS INT)
END
정상적으로 생성하였으면 SSMS의 다음과 같은 위치에 생성된 함수 확인이 가능합니다.
적용 시에는 원하는 문자열 또는 컬럼에 아래 블럭의 코드와 같이 적용하시면 됩니다.
-- 함수 적용시
SELECT dbo.fn_GetNumInString('문자열')
이제 간단한 예제를 통해 만들어진 함수를 사용해보겠습니다.
-- 입고 테이블을 중복 생성을 막기 위한 테이블 유무 검사
IF OBJECT_ID ('[dbo].[In_Table]') IS NOT NULL DROP TABLE [dbo].[In_Table]
-- 입고 테이블 생성
CREATE TABLE In_Table(
[ID] [INT] IDENTITY (1, 1) NOT NULL, --Key = 증가
[In_Date] [VARCHAR](10) NULL, -- 입고일자
[Employee] [VARCHAR](50) NULL, -- 직원
[Stock] [VARCHAR](50) NULL, -- 상품
[Qty] [INT] NULL, -- 수량
[Remark] [VARCHAR](50) NULL -- 적요
PRIMARY KEY ([ID]))
-- 입고 테이블에 INSERT
INSERT INTO In_Table([In_Date],[Employee],[Stock],[Qty],[Remark]) VALUES
('2022-12-01', '너울림', '배', 120, '대금 결제 : 250,000원'),
('2022-12-07', 'ullim', '사과', 230, ''),
('2022-12-08', 'ullim', '사과', 30, '대금 결제 : 320,000원'),
('2022-12-09', '너울림', '귤', 150, ''),
('2022-12-15', '너울림', '귤', 150, '대금 결제 : 170,000원'),
('2022-12-15', 'ullim', '바나나', 150, '대금 결제 : 400,000원')
-- 입고 테이블 조회
SELECT In_Date '입고일자', Stock '상품', Qty '수량', Remark '적요' FROM In_Table
-- 상품별 수량 및 대금 합계
SELECT Stock, SUM(Qty), SUM(dbo.fn_GetNumInString(Remark)) FROM In_Table GROUP BY Stock
실행 결과
상품 별로 수량 합계, 금액 합계를 계산해보았습니다. 하지만 예제를 위한 가상의 상황이고 실제 금액과 관련된 데이터는 예제와 같이 허술하게 다루지는 않습니다.
참고 링크
2022.12.24 - [DataBase/MS-SQL] - [MS-SQL] 다중 레코드 INSERT 하기
[MS-SQL] 다중 레코드 INSERT 하기
다중 레코드 INSERT 하기 포스팅 개요 저는 주로 레코드를 추가할 때 다음 3가지 방식을 가장 많이 사용합니다. 단일 레코드 추가 방식 예) INSERT INTO Table_name (컬럼1, 컬럼2, ...) VALUES (Val1,Val2,...) 다
ullim.net
'DataBase > MS-SQL' 카테고리의 다른 글
[MS-SQL] Microsoft SQL Server Express 모든 버전(~2022) 다운로드 설치 링크 (0) | 2024.12.31 |
---|---|
[MS-SQL] RAND 함수 활용하여 랜덤 일자(날짜), 시간 생성하기 (0) | 2023.02.08 |
[MS-SQL] 서브 쿼리 검색 조건 'WHERE EXISTS' 절의 구조와 활용 (0) | 2023.01.12 |
[MS-SQL] 특정 컬럼에서 소수점이 존재하는 레코드 조회하기 (0) | 2023.01.05 |
[MS-SQL] Create Table 생략하고 임시 테이블 생성 (Select Into) (0) | 2023.01.04 |
[MS-SQL] 그룹별 ROW(행) 문자열 결과 합치기 (STUFF, FOR XML PATH 활용) (0) | 2023.01.03 |
[MS-SQL] 중복 테이블 삭제 후에 다시 테이블 생성(CREATE)하기 (0) | 2023.01.02 |
[MS-SQL] 다중 레코드 INSERT 하기 (0) | 2022.12.24 |
댓글