열 이름을 이스케이프하는 SQL 표준?


96

열 이름을 이스케이프하는 SQL 표준이 있습니까? mysql 및 sqlite에서 작동하지 않는 것은 무엇입니까? sqlserver에서도 작동합니까?

sql 

답변:


88

인용 부호 "

SQL : 1999 표준 지정 따옴표는 ( ") (즉, 인용문 마크 )를 단락 식별자로 사용된다.

<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>

Oracle, PostgreSQL, MySQL, MSSQL 및 SQlite는 모두 "식별자 구분 기호로 지원 됩니다.

모두 "'기본값'으로 사용되지는 않습니다 . 예를 들어, ANSI 모드 에서 MySQL을 실행해야 하며 SQL Server QUOTED_IDENTIFIERON.


76

SQLite 에 따르면 ,

  • 'foo' SQL 문자열입니다.
  • "foo" SQL 식별자 (열 / 테이블 / 기타)
  • [foo] MS SQL의 식별자입니다.
  • `foo` MySQL의 식별자입니다.

정규화 된 이름의 경우 구문은 "t"."foo"또는 [t].[foo]등입니다.

ANSI_QUOTES옵션이 활성화 되면 MySQL은 표준 "foo"를 지원합니다 .


3
SQLite는 'foo'컨텍스트가 문자열을 허용하지 않는 경우 식별자 "foo"로 해석 될 수 있고 컨텍스트가 식별자를 허용하지 않는 경우 문자열로 해석 될 수 있습니다. 버전.
thomasrutter

그래서, 어떻게 "t". *를 수행합니까?
Loenix

2
@thomasrutter 그래 나는이 행동에 완전히 물렸다… 사용을 시도 WHERE "nonexistent_column" = 0했고 sqlite는 내가 "nonexistent_column"문자열 인 척 행복하게 실행했다 . "my_table"."nonexistent_column"sqlite가 더 엄격하게 작동하도록 이름을 완전히 규정합니다 .
Rufflewind

foo, "foo"그리고 'foo'MySQL에서 나를 위해 작동하지 않았습니다. 백틱이 필요했습니다. 설상가상으로 MySQL은 쓸모없는 오류 메시지를 제공했습니다 .
jww

22

MySQL의 경우 백틱`.

예를 들면 :

SELECT `column`, `column2` FROM `table`

19

MS SQL의 경우 [및] 사용

SELECT [COLUMN], [COLUMN 2] FROM [TABLE]

2
ms sql!?! 열 이름에 공백이있을 수 있습니다.

3
당신은 할 수 있습니다! 그래도 안 할 것입니다.
JMP

1
예, MSSQL에서 엔티티 이름으로 공백이나 예약어를 사용할 수 있습니다. [] 만하면됩니다.
BoltBait

6
BTW, MS SQL Server에서 [및]를 사용하고 이름 자체에] 문자를 사용하려는 경우 (어떤 이유로 든)] 대신 다른] 문자로 이스케이프해야합니다 (예 :] 대신]] 사용 ).
Daniel James Bryars 2011


1

몇 가지 답변을 모으기 :

MS SQL (일명 T-SQL), Microsoft Access SQL, DBASE / DBF : SELECT [COLUMN], [COLUMN2] FROM [TABLE]

MySQL : SELECT `COLUMN`, `COLUMN2` FROM `TABLE`

SQLite, Oracle, Postgresql : SELECT "COLUMN", "COLUMN2" FROM "TABLE"

추가 / 편집하십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.