Apakah ada standar SQL untuk mengonversi nama kolom? Jika tidak, apa yang berfungsi untuk MySQL dan SQLite? apakah itu juga berfungsi untuk SQL Server?
98
"
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_IDENTIFIER
ini ON
.
Menurut SQLite ,
'foo'
adalah string SQL"foo"
adalah pengenal SQL (kolom / tabel / dll)[foo]
adalah pengenal di MS SQL`foo`
adalah pengenal di MySQLUntuk nama yang memenuhi syarat, sintaksnya adalah: "t"."foo"
atau [t].[foo]
, dll.
MySQL mendukung "foo" standar jika ANSI_QUOTES
opsi ini diaktifkan.
'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.WHERE "nonexistent_column" = 0
dan 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.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 .Untuk MySQL, gunakan tanda centang '.
Misalnya:
sumber
Untuk penggunaan MS SQL [dan]
sumber
Untuk penggunaan DBASE / DBF
[
dan]
sumber
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!
sumber