문자제거 4

by 천사원이 [SQL Query] mssql [2025.03.10 11:01:31]


MSSQL 사용 하고 있습니다.

NVARCHAR로 선언된 컬럼에서 문자는 제거 하고 숫자만 가져오고 싶은데
한큐에 해결 할 수 있는 방법이 잇을까요...

01AA
02MM
03SS
04AD
01MM02AA
02SSMM01AA02AD

 

데이터가 이런식으로 들어가 있어서 REPLACE로 하나씩 제거 하기엔 너무 번거로울 것 같고..
끝에 두자리만 잘라내기엔 중간에 영문이 들어가 있는 경우도 있어서 잘 안되네요ㅠㅠ

01
0203
04
0102
020102

이런식으로 가져오고 싶습니다!

 

 

추가...

하이픈이 있는경우 하이픈은 유지되어야 합니다

01-03MM

01-03 으로 변환 할수있을까요?

by 마농 [2025.03.11 07:58:39]
WITH t AS
(
SELECT '01AA' v
UNION ALL SELECT '02MM'
UNION ALL SELECT '03SS'
UNION ALL SELECT '04AD'
UNION ALL SELECT '01MM02AA'
UNION ALL SELECT '02SSMM01AA02AD'
UNION ALL SELECT '01-03MM'
)
SELECT v
     , REPLACE(TRANSLATE(v, 'abcdefghijklmnopqrstuvwxyz', '                          '), ' ', '') x
  FROM t
;

 


by 아발란체 [2025.03.11 09:33:31]

정규식 이용하면, "\-" 만 추가하면 됩니다.

 

WITH T(val) AS (
    SELECT '01AA'
    UNION ALL SELECT '02M-M'
    UNION ALL SELECT '03SS'
    UNION ALL SELECT '04AD'
    UNION ALL SELECT '01MM02AA'
    UNION ALL SELECT '02SSMM01AA02AD'
)
SELECT
    val,(
        SELECT STUFF((
            SELECT
                '' + c
            FROM (
                SELECT
                    SUBSTRING(val, Number, 1) AS c
                FROM
                    master.dbo.spt_values
                WHERE
                    Type = 'P'
                    AND Number BETWEEN 1 AND LEN(val)
            ) AS digits
            WHERE
                c LIKE '[0-9\-]'
            FOR XML PATH('')
        ), 1, 0, '')
    ) AS only_num
FROM T;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입