¿Estándar SQL para escapar de los nombres de columna?


98

¿Existe un estándar SQL para escapar de un nombre de columna? Si no, ¿qué funciona para MySQL y SQLite? ¿también funciona para SQL Server?

Respuestas:


89

Comillas "

El estándar SQL: 1999 especifica que se utilizan comillas dobles (") ( COMPROMISO ) para delimitar los identificadores.

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

Oracle, PostgreSQL, MySQL, MSSQL y SQlite son compatibles "como delimitadores de identificadores.

No todos se utilizan "como "predeterminados". Por ejemplo, debe ejecutar MySQL en modo ANSI y SQL Server solo lo admite cuando lo QUOTED_IDENTIFIERestá ON.


77

Según SQLite ,

  • 'foo' es una cadena SQL
  • "foo" es un identificador SQL (columna / tabla / etc.)
  • [foo] es un identificador en MS SQL
  • `foo` es un identificador en MySQL

Para nombres calificados, la sintaxis es: "t"."foo"o [t].[foo], etc.

MySQL admite el estándar "foo" cuando la ANSI_QUOTESopción está habilitada.


3
Tenga en cuenta que SQLite permite 'foo'ser interpretado como un identificador si el contexto no permite una cadena, y "foo"puede ser interpretado como una cadena si el contexto no permite un identificador, aunque hay una nota de que este comportamiento puede eliminarse en el futuro. Versiones
— thomasrutter

Entonces, ¿cómo se hace "t". *?
— Loenix

2
@thomasrutter Sí, este comportamiento me mordió totalmente ... Intenté usar WHERE "nonexistent_column" = 0y sqlite lo ejecutó felizmente pretendiendo que mi "nonexistent_column"era una cadena. Calificar completamente el nombre como "my_table"."nonexistent_column"obliga a sqlite a comportarse de manera más estricta.
— Rufflewind

foo, "foo"y 'foo'no me funcionó con MySQL. Requería comillas inversas. Y para empeorar las cosas, MySQL estaba proporcionando mensajes de error inútiles .
— jww

22

Para MySQL, use ticks `.

Por ejemplo:

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

20

Para uso de MS SQL [y]

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

2
puede tener espacios en los nombres de las columnas con ms sql!?!

3
¡usted puede! Aunque no lo haría.
— JMP

1
Sí, puede tener espacios o palabras reservadas como nombres de entidad en MSSQL. Solo necesitas [] ellos.
— BoltBait

6
Por cierto, si está usando [y] en MS SQL Server y desea usar el carácter] en el nombre mismo (por el motivo que sea), entonces debe escapar con otro carácter] (es decir, use]] en lugar de] ).
— Daniel James Bryars

2

Para uso de DBASE / DBF [y]

SELECT [DATE], [TIME], [ANY_OTHER_TO_BE_ESCAPED_COLUMN] FROM [TABLE]

1

Juntando algunas respuestas:

MS SQL (también conocido como 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"

¡Agregue / edite!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.