SQL 키워드처럼 보이는 SQL 열 이름을 처리하는 방법은 무엇입니까?


226

내 열 중 하나를이라고 from합니다. 이름을 만들지 않았기 때문에 이름을 변경할 수 없습니다. SELECT from FROM TableNameSQL Server와 혼동을 피하기 위해 비슷한 작업을 수행 하거나 특별한 구문이 있습니까?


3
구분 식별자에 ANSI SQL의 큰 따옴표를 사용한다고 말하고 싶습니다. SQL Server를 포함한 거의 모든 dbms에서 작동합니다. 즉, 간단 SELECT "from" FROM TableName하고 훌륭하고 휴대 가능합니다!
jarlh

답변:


354

열 이름을 괄호로 묶으면 from[from]이됩니다.

select [from] from table;

다음을 사용할 수도 있습니다 (여러 테이블을 쿼리 할 때 유용함).

select table.[from] from table;

10
: 약 무엇 select TableName.from from TableName; PS : 그것은 MySQL의에서 작동
파브 PH

1
오늘 아침에 이것을 시도했지만 MySQL 설치에서 작동하지 않는 것 같습니다. 매개 변수입니까 아니면 켜는 것입니까?
CodeChimp

@CodeChimp-backticks, stackoverflow.com/questions/2901453/…을 사용해보십시오. 이 질문 / 답변은 MS SQL Server에만 해당됩니다.
tvanfosson 2016 년

그러나 @FabricioPH는 MySQL에서 작동한다고 언급했습니다. 로컬 MySQL 설치에서 시도한 후에 Google 검색에서 여기를 가로 질러 발생했습니다. SQL에서 이와 같은 항목을 이스케이프 처리하는 일반적인 ANSI SQL 방법이 있는지 확인하려고했습니다. 현재 SQL Server 2005를 사용하고 있지만 일부 다른 앱에도 Oracle이 있습니다. 우리는 Java DAO를 SQL Server에서 다른 것으로 이동하라는 지시를 받으면 "작동"하는 방식으로 Java DAO를 코딩하려고합니다.
CodeChimp

@CodeChimp 나는 손가락없이 나에게 일어난 횟수를 셀 수 있습니다. :)
tvanfosson

25

PostgreSQL에 있었던 경우 이름과 같이 큰 따옴표를 사용하십시오.

select "from" from "table";

참고 : 내부적으로 PostgreSQL은 인용되지 않은 모든 명령과 매개 변수를 자동으로 소문자로 변환합니다. 명령과 식별자는 대소 문자를 구분하지 않습니다. 간단한 * from tAblE; 테이블에서 select * 로 해석됩니다 . . 그러나 큰 따옴표 안에있는 매개 변수는 그대로 사용되므로 대소 문자를 구분합니다. select * from "table"; 그리고 "표"SELECT * FROM; 두 개의 다른 테이블에서 결과를 가져옵니다.


큰 따옴표는 대소 문자를 구분하지 않고 MS SQL에서도 작동합니다. 따옴표 붙은 식별자는 대괄호로 구분 된 식별자와 동등한 AFAIK입니다.
P Daddy

큰 따옴표는 Amazon Athena에서 사용하는 Presto SQL 쿼리 엔진에도 적용됩니다.
Will Humphreys

21

당신이하고있는 동안-다른 것으로 별칭을 지정하십시오 (또는 더 나은 방법으로보기 나 SP를 사용하고 이전 직접 액세스 방법을 사용하지 마십시오).

SELECT [from] AS TransferFrom -- Or something else more suitable
FROM TableName

14

다음 두 가지 방법이 있습니다.

  1. 여기에 인용 부호를 사용하십시오.

FROM TableName에서`from` 선택

  1. 테이블 이름을 다음과 같이 언급 할 수 있습니다.

SELECT TableName.from FROM TableName


감사! 이것은 BY 열에서 가져 오려고하는 Google 스프레드 시트 쿼리를 저장했습니다.
Paul

1
고마워, 큰 따옴표와 대괄호 구문은 내 클라이언트 (MySQLWorkbench)에서 작동하지 않지만 백 틱 메소드는 작동했습니다.
kingInTheNorth

10

귀하의 질문에 대한 답변이 여기에있는 것 같지만이 주제에 대한 의견을 하나 더 추가하고 싶습니다.

데이터베이스를 설계하는 사람은 예약 키워드를 잘 알고 사용하지 않아야합니다. 그것을 사용하는 사람을 발견하면, 정중 한 방법으로 알려주십시오. 여기서 키워드는 예약어 입니다.

추가 정보:

"예약 된 키워드는 개체 이름으로 사용해서는 안됩니다. 이전 버전의 SQL Server에서 업그레이드 된 데이터베이스에는 이전 버전에서는 예약되지 않은 단어는 포함하지만 현재 버전의 SQL Server에는 예약 된 단어가 포함 된 식별자가 포함될 수 있습니다. 이름을 변경할 수있을 때까지 구분 된 식별자를 사용하여 개체를 제거하십시오. " http://msdn.microsoft.com/en-us/library/ms176027.aspx

"데이터베이스에 예약 키워드와 일치하는 이름이 포함 된 경우 해당 오브젝트를 참조 할 때 구분 식별자를 사용해야합니다. 자세한 정보는 식별자 (DMX)를 참조하십시오." http://msdn.microsoft.com/en-us/library/ms132178.aspx


2
더 나은 방법은 항상 데이터베이스 개체에 대괄호를 사용하는 것입니다.
두드리는

8

SQL Server를 사용하는 경우 열 또는 테이블 이름을 대괄호로 묶기 만하면됩니다.

select [select]
from [table]

5

Apache Drill에서 역 따옴표를 사용하십시오.

select `from` from table;

3

나는 또한이 문제에 직면했다. 이에 대한 해결책은 쿼리에 [Column_Name]과 같은 것을 넣는 것입니다.

string query= "Select [Name],[Email] from Person";

따라서 완벽하게 작동합니다.


3

안녕하세요, 저는 완전히 ANSI와 호환되는 Teradata 시스템에서 작업하고 있습니다. 큰 따옴표 ""를 사용하여 이러한 열의 이름을 지정하십시오.

type를 들어 SQL 예약 키워드이며 따옴표 안에 사용 type하면 사용자 지정 이름으로 취급됩니다.

아래 코드 예제를 참조하십시오.

CREATE TABLE alpha1
AS
(
SEL
product1
type_of_product AS "type"
FROM beta1
) WITH DATA
PRIMARY INDEX (product1)

--type is a SQL reserved keyword

TYPE

--see? now to retrieve the column you would use:

SEL "type" FROM alpha1

Teradata 데이터베이스가있는 DBeaver에서 작동한다는 것을 확인했습니다. 감사합니다!
Paul

1

다음과 같이 열 이름을 괄호 안에 넣을 수 있습니다.

Select  [from] from < ur_tablename>

또는

임시 테이블에 넣은 다음 원하는대로 사용하십시오.
예:

Declare @temp_table table(temp_from varchar(max))

Insert into @temp_table
Select * from your_tablename

여기서는 your_tablename에 열이 하나만 있다고 가정합니다 (예 : from).


3
그것은 그것이 가지고 [from]있는 유일한 열이라고 가정합니다 your_tablename.
Andriy M

임시 테이블에서 무엇을 얻습니까? 그것은 전혀 쓸모없는 것처럼 보이며 질문과 전혀 관련이 없습니다.
rjmunro

@rjmunro, 아니오, 이것은 완전히 쓸모없는 것처럼 보이지 않습니다. SQL에서 테이블 형식 큐브를 쿼리하고 '[Total]'과 같은 열 이름을 반환하는 경우가 있습니다. 즉, 이름 자체에는 '['및 ']'가 포함됩니다. [[Total]] 및 [Total]을 사용하여 이러한 열을 검색 할 수 없습니다. 가장 쉬운 방법은 쿼리 결과를 임시 테이블에 넣는 것입니다.
darlove

@darlove 따옴표를 사용할 수 없습니다 : "[Total]"? 아니면 어쩌면 그것을 피할 수있는 방법이 [\[Total\]]있습니까?
rjmunro

@rjmunro, 이것에 대해 조금 실험 한 후, 내가 알지 못하는 또 다른 방법을 찾았습니다. QUOTED_IDENTIFIER를 ON으로 설정 한 다음 큰 따옴표 "를 사용할 수 있습니다. 하지만 임시 테이블 옵션을 완전히 삭제하지는 않습니다.
darlove

1

이름이 키워드 인 열 을 업데이트 하려고 할 때 같은 문제가 발생했습니다 . 위의 해결책은 도움이되지 않았습니다. 다음과 같이 테이블 이름을 지정하여 해결했습니다.

UPDATE `survey`
SET survey.values='yes,no'
WHERE (question='Did you agree?')


1

MySQL에서는 역 따옴표 (`)를 사용하는 대신 UI를 사용하여 열 이름을 변경할 수 있습니다. 테이블> 테이블 변경> sql 키워드가 포함 된 열 이름 편집> 커밋을 마우스 오른쪽 단추로 클릭하십시오.

select [from] from <table>

참고로 위의 MySQL에서는 작동하지 않습니다.


1

여기의 답변과 내 경험으로 판단하십시오. 이식성이 좋은 계획이라면 테이블, 열 또는 다른 이름에 SQL 키워드를 사용하지 않는 것이 유일한 대답입니다.

이 모든 대답은 다양한 데이터베이스에서 작동하지만 ANSI 솔루션을 많이 지원하지 않는 것 같습니다.

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