Mssql 엔터값 찾기 - mssql enteogabs chajgi

게시판에서 내용을 작성할 때 한줄띄우기 (엔터)를 입력하여 넣고

목록에서 출력하려고 할 때

한 줄 띄운것이 html에서 안 읽혀서 

한 줄 띄워지지 않고 표출 될 때가 있다.

그래서 쿼리에서 엔터를 replace 처리하여 <br>로 바꾸어 출력하였다.

우선 replace 하기 전에 알아야 될 것은

무엇을 <br>로 바꿔야 하는지 였다.

한줄띄우기는 보통 [캐리지 리턴] 과 [라인피드]로 이루어져있다.

캐리지 리턴 : \r   동일한 줄의 첫번째 자리에 커서를 위치시킴

라인피드 : \n  현재커서가 위치한 곳에서 한줄 아래로 이동

즉 엔터는 캐리지 리턴 후 라인피드를 한 것

자세한건 여기서 : http://m.blog.daum.net/chan6030/7556650

////////////////////////////

그래서 우리는 캐리지리턴+라인피드가 합쳐진 문자를 <br>태그로 치환하면 된다.

ex)

  REPLACE(MSSAGE,CHAR(13)+CHAR(10), '<![CDATA[<br>]]>') AS MSSAGE

CHAR(13) = 캐리지 리턴  \r

CHAR(10) = 라인피드    \n

MSSQL에서 SMS발송업무등 부득히 문장을 줄바꿈해야하는 일이 발생한다.
이런 이슈에 아래와 같이 처리를 한다.

Mssql 엔터값 찾기 - mssql enteogabs chajgi
"MSSQL띄어쓰기 테스트합니다. 안녕하세요. Tistory여러분!!"을  "~테스트 합니다."에서 줄바꿈을 하고 싶다!!

<해결방법: char(13),char(10)>

Select Concat('MSSQL띄어쓰기 테스트합니다.',char(13),char(10),' 안녕하세요. Tistory여러분!!') As '줄바꿈'
Mssql 엔터값 찾기 - mssql enteogabs chajgi
참고로 MSSQL 2012부터 문자열 붙이기 Concat을 지원하며 이전 버전에서는 기존 + 형식으로 처리를 해주면 된다!!

● DB 데이터에 줄 바꿈이 있을때 SQL에서 처리하는 방법

안녕하세요. 오늘은 DB 데이터 값안에 엔터, 줄바꿈 데이터가 존재 했을 때 SQL에서 처리하는 방법에 대해서 알아 보겠습니다.

DB 데이터에 줄바꿈 데이터가 있을 때 데이터를 뽑게 되면

SQL 데이터 ROW값이 한 줄이 아닌 줄바꿈 되어서 많이 당황스러웠던 적이 있었을 겁니다.

이를 해결하기 위해서는 아래와 같습니다.

SELECT MEMO
FROM SHOPING
;

예를 들어 SHOPING 테이블에 MEMO 컬럼의 데이터가 있다고 가정합니다. 

이때 MEMO 데이터 안에 줄바꿈 데이터

"안녕

하세요"

이러한 데이터 있을 경우 줄 바꿈되어서 데이터가 추출 되어 지는데 이를 해결하기 위해서는 

SELECT replace(MEMO, chr(10), '') 
FROM SHOPING
;

chr(10) => 아스키코드로 \n 줄바꿈을 의미하며

replace 를 통해 \n 을 ''으로 치환한다.

audited_changes컬럼에 아래와 같이 개행이 포함된 값을 검색하기 위해서

user_approve_status:
- 0
- 2

아래쿼리 같이 like ‘%%’ 사이에 \n을 넣어줘서 검색할 수 있다.

select * from audits where audited_changes like '%user_approve_status:\n- 0\n- 2%'

메모

CHAR(13)이 개행코드 이므로 CONCAT과 같이 아래와 같이도 사용가능하다고 한다.

SELECT
  *
FROM
  table_name
WHERE
  column_name LIKE CONCAT('%', CHAR(13), '%')
;

  • ← Previous Post
  • Next Post →

데이터의 값이 엔터가 들어간 문자를 찾기 위해서 테이블을 생성하고, 엔터가 들어가지 않은 데이터와 엔터가 들어간 데이터를 삽입하여 조회 후 엔터를 제거하는 쿼리를 나열 하겠습니다.

1. 테이블 생성

2. 데이터 생성

  • USER_ID를 동일한 값을 지정하는 이유는 마지막에 치환할 때 홍길동은 아무런 변화가 없어야 하므로, 유효성 체크를 위해서 입니다. 만약, 아무런 문제가 없는 홍길동을 치환 시켜버린다면 더 큰 문제가 발생 할 수 있으니 테스트는 엔터 없는 데이터와 엔터가 있는 데이터를 치환할 때 문제가 없는지 파악합니다.

3. 데이터 확인

[결과]

4. 엔터(ENTER) 데이터 찾기

Mssql 엔터값 찾기 - mssql enteogabs chajgi

  • 데이터 중에서 ENTER가 들어간 문자를 'PWDENTER##!!' 임의의 값으로 변경하고 조회하는 방법 입니다.

5. 엔터(ENTER) 데이터 치환하기

5-1. 치환된 결과 확인

위 내용처럼 오라클 함수를 이용해서 엔터(ENTER)값을 치환할 수 있습니다.

사용되었던 SQL은 아래와 같습니다.

/* 1. 테이블 생성 */

CREATE TABLE ADBANCED_ENTER_TB(USER_ID VARCHAR2(10) NOT NULL

,USER_NM VARCHAR2(50) NOT NULL

)

;

/* 2. 데이터 생성 */

INSERT INTO ADBANCED_ENTER_TB a (A.USER_id, A.user_nm) values('advance01', '홍길동');

INSERT INTO ADBANCED_ENTER_TB a (A.USER_id, A.user_nm) values('advance01', '마리

오');

/* 4. 엔터(ENTER) 데이터 찾기*/

SELECT A.*

FROM (SELECT A.USER_ID

,A.USER_NM

,REPLACE(

REPLACE(A.USER_NM, CHR(13), '')

,CHR(10), 'PWDENTER##!!'

) AS ENTER_USER_NM

FROM ADBANCED_ENTER_TB A) A

WHERE A.ENTER_USER_NM LIKE '%PWDENTER##!!%'

;

/* 5. 엔터(ENTER) 데이터 치환하기 */

UPDATE ADBANCED_ENTER_TB A

SET A.USER_NM = REPLACE(REPLACE(A.USER_NM, CHR(13), ''), CHR(10), '')

WHERE A.USER_ID = 'advance01'