[sql] 아포스트로피가 포함 된 값을 삽입하는 방법 (작은 따옴표)?

아포스트로피가있는 값을 삽입하는 올바른 SQL 구문은 무엇입니까?

Insert into Person
  (First, Last)
Values
  'Joe',
  'O'Brien'

O 다음의 아포스트로피가 값의 끝 태그라고 생각할 때 오류가 계속 발생합니다.



답변

SQL에서 아포스트로피를 피하십시오 (즉, 작은 따옴표 문자를 두 배로 늘림).

INSERT INTO Person
    (First, Last)
VALUES
    ('Joe', 'O''Brien')
              /\
          right here  

SELECT 쿼리에도 동일하게 적용됩니다.

SELECT First, Last FROM Person WHERE Last = 'O''Brien'

아포스트로피 또는 작은 따옴표는 문자열 데이터의 시작과 끝을 지정하는 SQL의 특수 문자입니다. 즉, 문자를 리터럴 문자열 데이터의 일부로 사용 escape하려면 특수 문자 가 필요합니다 . 작은 따옴표를 사용하면 일반적으로 따옴표를 두 배로 늘립니다. (작은 따옴표 대신 큰 따옴표가 아닌 두 개의 작은 따옴표 문자)

참고 : 원시 SQL 인터페이스를 통해 수동으로 데이터를 편집 할 때 개발 및 테스트 외부에서 쿼리를 작성하는 일은 드물기 때문에이 문제에 대해서만 걱정해야합니다. 코드에는 특수 문자 이스케이프 처리, SQL 주입 등 을 처리하는 기술 및 프레임 워크 (스택에 따라 다름)가 있습니다 .


답변

작은 따옴표를 두 배로 늘려야합니다 …

insert into Person (First, Last)
values ('Joe', 'O''Brien')


답변

아포스트로피를 피해야합니다. T-SQL 에서는 이중 아포스트로피를 사용하므로 insert명령문이 다음과 같이됩니다.

Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'


답변

작은 따옴표는 문자열의 시작과 끝을 나타내는 데 사용되기 때문에; 당신은 그것을 탈출해야합니다.

짧은 대답은 ''SQL 데이터베이스가 값을로 저장하기 위해 두 개의 작은 따옴표를 사용 하는 것 '입니다.

들어오는 값을 삭제하려면 REPLACE를 사용하십시오.

당신은 확인하고 싶은 '''', 그리고 그들이 함께 문자열에있는 경우 교체 ''''''고독한 작은 따옴표를 탈출하기 위해.


답변

eduffy는 좋은 생각을 가지고있었습니다 . 코드 예제에서 방금 가져 왔습니다. JavaScript 또는 SQLite에서 아포스트로피를 악센트 기호로 바꿀 수 있습니다.

그는 O’Brian에서 아포스트로피를 교체하는 대신 악센트 기호를 문자열의 구분 기호로 배치했습니다. 이것은 사실 대부분의 경우 매우 간단한 솔루션입니다.


답변

아포스트로피 문자는 아포스트로피의 ASCII 테이블 조회 값 39로 CHAR 함수를 호출하여 삽입 할 수 있습니다. 그런 다음 문자열 값을 연결 연산자 와 함께 연결할 수 있습니다.

Insert into Person
  (First, Last)
Values
  'Joe',
  concat('O',char(39),'Brien')


답변

작은 따옴표는 두 배로 확대하여 이스케이프 처리합니다 .

다음 SQL은이 기능을 보여줍니다.

declare @person TABLE (
    [First] nvarchar(200),
    [Last] nvarchar(200)
)

insert into @person
    (First, Last)
values
    ('Joe', 'O''Brien')

select * from @person

결과

First   | Last
===================
Joe     | O'Brien