Standar SQL untuk keluar dari nama kolom?

98

Apakah ada standar SQL untuk mengonversi nama kolom? Jika tidak, apa yang berfungsi untuk MySQL dan SQLite? apakah itu juga berfungsi untuk SQL Server?

Dale K
sumber

Jawaban:

89

Tanda kutip "

The SQL: 1999 standar menspesifikasikan bahwa kutipan ganda ( ") ( KUTIPAN MARK ) digunakan untuk membatasi pengidentifikasi.

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

Oracle, PostgreSQL, MySQL, MSSQL dan SQlite semuanya mendukung "sebagai pemisah pengenal.

Mereka tidak semuanya digunakan "sebagai 'default'. Misalnya, Anda harus menjalankan MySQL di modus ANSI dan SQL Server hanya mendukung saat QUOTED_IDENTIFIERini ON.

Dean Harding
sumber
77

Menurut SQLite ,

  • 'foo' adalah string SQL
  • "foo" adalah pengenal SQL (kolom / tabel / dll)
  • [foo] adalah pengenal di MS SQL
  • `foo` adalah pengenal di MySQL

Untuk nama yang memenuhi syarat, sintaksnya adalah: "t"."foo"atau [t].[foo], dll.

MySQL mendukung "foo" standar jika ANSI_QUOTESopsi ini diaktifkan.

tc.
sumber
3
Perhatikan bahwa SQLite memungkinkan 'foo'untuk ditafsirkan sebagai pengenal jika konteks tidak mengizinkan string, dan "foo"untuk ditafsirkan sebagai string jika konteks tidak mengizinkan pengenal, meskipun ada catatan bahwa perilaku ini dapat dihapus di masa mendatang versi.
thomasrutter
Jadi, bagaimana Anda melakukan "t". *?
Loenix
2
@thomasrutter Ya saya benar-benar digigit oleh perilaku ini ... Mencoba menggunakan WHERE "nonexistent_column" = 0dan sqlite dengan senang hati mengeksekusinya dengan berpura-pura bahwa saya "nonexistent_column"adalah string. Nama sepenuhnya memenuhi syarat sebagai "my_table"."nonexistent_column"memaksa sqlite berperilaku lebih ketat.
Rufflewind
foo, "foo"dan 'foo'tidak berhasil untuk saya dengan MySQL. Itu membutuhkan pukulan balik. Dan untuk memperburuk keadaan, MySQL memberikan pesan kesalahan yang tidak berguna .
jww
22

Untuk MySQL, gunakan tanda centang '.

Misalnya:

SELECT `column`, `column2` FROM `table`
Kerry Jones
sumber
20

Untuk penggunaan MS SQL [dan]

SELECT [COLUMN], [COLUMN 2] FROM [TABLE]
BoltBait
sumber
2
Anda dapat memiliki spasi dalam nama kolom dengan ms sql!?!
3
kamu bisa! Aku tidak akan melakukannya.
JMP
1
Ya, Anda dapat memiliki spasi atau kata yang dipesan sebagai nama entitas di MSSQL. Anda hanya perlu [] mereka.
BoltBait
6
BTW, jika Anda menggunakan [dan] di MS SQL Server dan Anda ingin menggunakan karakter] dalam nama itu sendiri (untuk alasan apa pun), maka Anda perlu menguranginya dengan karakter] lain (yaitu gunakan]] daripada] ).
Daniel James Bryars
2

Untuk penggunaan DBASE / DBF [dan]

SELECT [DATE], [TIME], [ANY_OTHER_TO_BE_ESCAPED_COLUMN] FROM [TABLE]
Serhii Matrunchyk
sumber
1

Menyatukan beberapa jawaban:

MS SQL (alias 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"

Silakan tambahkan / edit!

orangecaterpillar
sumber