Sütun adlarından kaçmak için SQL standardı?


100

Bir sütun adından kaçmak için bir SQL standardı var mı? MySQL ve SQLite için ne işe yaramazsa? SQL Server için de çalışıyor mu?

Yanıtlar:


91

Tırnak işareti "

SQL: 1999 standardı belirtir çift tırnak ( ") (yani TEKLİFİ İŞARETİ ) sınırlandırmaktadır tanımlayıcılar için kullanılır.

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

Oracle, PostgreSQL, MySQL, MSSQL ve SQlite ", tanımlayıcı sınırlayıcı olarak destekler .

Hepsi "'varsayılan' olarak kullanılmıyor. Örneğin, MySQL çalışıyor olması gerekmektedir ANSI modunda ve SQL Server, yalnızca onu destekleyen QUOTED_IDENTIFIERolduğunu ON.


79

SQLite'ye göre ,

  • 'foo' bir SQL dizesidir
  • "foo" bir SQL tanımlayıcısıdır (sütun / tablo / vb.)
  • [foo] MS SQL'de bir tanımlayıcıdır
  • `foo` MySQL'deki bir tanımlayıcıdır

Nitelikli adlar için sözdizimi: "t"."foo"veya [t].[foo], vb.

MySQL, ANSI_QUOTESseçenek etkinleştirildiğinde standart "foo" yu destekler .


3
SQLite'in 'foo', bağlam bir dizeye izin vermiyorsa bir tanımlayıcı olarak yorumlanmasına ve bağlam bir tanımlayıcıya izin vermiyorsa bir dize "foo"olarak yorumlanmasına izin verir, ancak bu davranışın gelecekte kaldırılabileceğine dair bir not vardır. sürümler.
thomasrutter

Peki, "t" yi nasıl yaparsınız?
Loenix

2
@thomasrutter Evet, bu davranıştan tamamen ısırıldım… Kullanmaya çalıştım WHERE "nonexistent_column" = 0ve sqlite, benim "nonexistent_column"bir dizeymiş gibi mutlu bir şekilde yürüttü . İsmi "my_table"."nonexistent_column"tam anlamıyla sqlite olarak nitelendirmek, daha katı davranmaya zorlar.
Rufflewind

foo, "foo"Ve 'foo'MySQL ile benim için işe yaramadı. Ters vuruşlar gerekiyordu. Ve daha da kötüsü, MySQL gereksiz hata mesajları veriyordu .
jww

22

MySQL için geri tikleri kullanın ".

Örneğin:

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

20

MS SQL için [ve]

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

2
ms sql ile sütun adlarında boşluklar olabilir!?!

3
yapabilirsin! Yine de yapmazdım.
JMP

1
Evet, MSSQL'de varlık adları olarak boşluklar veya ayrılmış sözcükleriniz olabilir. Sadece onlara [] ihtiyacınız var.
BoltBait

6
BTW, MS SQL Sunucusunda [ve] kullanıyorsanız ve adın kendisinde] karakterini (herhangi bir nedenle) kullanmak istiyorsanız, o zaman başka bir] karakterle (yani]] yerine] karakterini kullanmanız gerekir. ).
Daniel James Bryars

2

DBASE / DBF kullanımı için [ve]

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

1

Bazı cevapları bir araya getirmek:

MS SQL (diğer adıyla 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"

Lütfen ekleyin / düzenleyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.