Standard SQL do zmiany nazwy kolumn?


100

Czy istnieje standard SQL umożliwiający zmianę znaczenia nazwy kolumny? Jeśli nie, co działa z MySQL i SQLite? czy działa również dla SQL Server?

Odpowiedzi:


90

Cudzysłów "

SQL: 1999 Standard określa , że podwójny cudzysłów ( ") ( cudzysłów ) używana jest do wskazania identyfikatorów.

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

Oracle, PostgreSQL, MySQL, MSSQL i SQlite obsługują "jako separator identyfikatorów.

Nie wszyscy używają "jako „domyślnych”. Na przykład, musisz uruchomić MySQL w trybie ANSI, a SQL Server obsługuje go tylko wtedy, gdy QUOTED_IDENTIFIERjest ON.


78

Według SQLite ,

  • 'foo' jest ciągiem SQL
  • "foo" to identyfikator SQL (kolumna / tabela / itp.)
  • [foo] jest identyfikatorem w MS SQL
  • `foo` to identyfikator w MySQL

W przypadku nazw kwalifikowanych składnia to: "t"."foo"lub [t].[foo]itp.

MySQL obsługuje standardowe "foo", gdy ta ANSI_QUOTESopcja jest włączona.


3
Zwróć uwagę, że SQLite pozwala 'foo'być interpretowane jako identyfikator, jeśli kontekst nie pozwala na ciąg i "foo"być interpretowane jako ciąg, jeśli kontekst nie pozwala na identyfikator, chociaż jest uwaga, że ​​to zachowanie może zostać usunięte w przyszłości wersje.
thomasrutter

Jak więc zrobisz "t". *?
Loenix

2
@thomasrutter Tak, całkowicie mnie ugryzło to zachowanie… Próbowałem użyć WHERE "nonexistent_column" = 0i sqlite po prostu szczęśliwie wykonał to, udając, że mój "nonexistent_column"był ciągiem. Pełne zakwalifikowanie nazwy jako "my_table"."nonexistent_column"wymusza na sqlite bardziej rygorystyczne zachowanie.
Rufflewind

foo, "foo"i 'foo'nie działa dla mnie z MySQL. Wymagało backticks. Co gorsza, MySQL dostarczał bezużyteczne komunikaty o błędach .
jww

22

W przypadku MySQL użyj wstecznych znaczników `.

Na przykład:

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

20

W przypadku MS SQL użyj [i]

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

2
możesz mieć spacje w nazwach kolumn za pomocą ms sql!?!

3
możesz! Nie zrobiłbym tego jednak.
JMP

1
Tak, możesz mieć spacje lub zarezerwowane słowa jako nazwy jednostek w MSSQL. Po prostu musisz je [].
BoltBait

6
BTW, jeśli używasz [i] w MS SQL Server i chcesz użyć znaku] w samej nazwie (z jakiegokolwiek powodu), musisz zmienić jego znaczenie innym] znakiem (tj. Użyj]] zamiast] ).
Daniel James Bryars,


1

Łącząc kilka odpowiedzi:

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

Proszę dodać / edytować!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.