Qual è la differenza tra virgolette singole e doppie in SQL?


225

Qual è la differenza tra virgolette singole e doppie tra virgolette in SQL?

Risposte:


154

Le virgolette singole vengono utilizzate per indicare l'inizio e la fine di una stringa in SQL. Le virgolette doppie generalmente non vengono utilizzate in SQL, ma possono variare da un database all'altro.

Attenersi all'utilizzo di virgolette singole.

Questo è comunque l'uso principale. È possibile utilizzare virgolette singole per un alias di colonna, in cui si desidera che il nome della colonna a cui si fa riferimento nel codice dell'applicazione sia diverso da quello che la colonna viene effettivamente chiamata nel database. Ad esempio: PRODUCT.idsarebbe più leggibile come product_id, quindi si utilizza una delle seguenti opzioni:

  • SELECT PRODUCT.id AS product_id
  • SELECT PRODUCT.id 'product_id'

Funziona in Oracle, SQL Server, MySQL ... ma so che alcuni hanno detto che l'IDE TOAD sembra dare un po 'di dolore quando si utilizza l'approccio a virgolette singole.

È necessario utilizzare virgolette singole quando l'alias di colonna include un carattere spazio, ad esempio product id, ma non è consigliabile che l'alias di colonna sia più di una parola.


31
Le virgolette doppie vengono generalmente utilizzate per i nomi degli oggetti (ad esempio il nome della colonna "Nome"). Questo fa parte dello standard SQL-92.
LukLed

19
No. Intendevo i nomi delle colonne, ma riguarda anche gli alias. Consiglierei di usare le virgolette doppie per alias e nomi con caratteri insoliti, a causa dello standard SQL-92. SELECT * FROM USERS 'Users'non funziona in SQL Server, ma SELECT * FROM USERS "Users"funziona.
LukLed

122
Sbaglio sempre fino a quando ho realizzato una semplice regola: [S] citazione in inglese per [S] trings, [D] ouble quote per cose nella atabase [D]
Spacedman

4
È necessario utilizzare virgolette doppie per gli identificatori. Le virgolette singole vanno contro lo standard.
Erwin Brandstetter,

6
SELECT PRODUCT.id 'product_id'sarà non lavorare in Oracle. Le virgolette singole sono solo per i letterali dei personaggi. Non possono essere utilizzati per identificatori in (standard) SQL (anche se alcuni DBMS ignorano semplicemente lo standard SQL quando si tratta di identificatori tra virgolette)
a_horse_with_no_name

80

Una semplice regola per noi per ricordare cosa usare in tal caso:

  • [ S ] ingle citazioni sono per [ S Trings]; Le virgolette [ D ] sono per identificatori di atabase [ D ];

In MySQL e MariaDB, il ` simbolo (backtick) è lo stesso del " simbolo. Si può usare " quando il vostro SQL_MODEè ANSI_QUOTESabilitato.


4
Per chiarire, backtick (`) può essere usato per delimitare gli identificatori se ANSI_QUOTES è abilitato o meno, ma se ANSI_QUOTES è abilitato, allora" non puoi usare virgolette doppie per citare stringhe letterali, perché è interpretato come un identificatore ". ( fonte ). (Tutto questo presuppone che tu stia parlando di MySQL, mente.)
Sam,

Wow! Memo eccellente!
Alex Yu,

Ma le citazioni in inglese [ S ] sono anche per [ D ] hanno mangiato letterali. : - /
Bill Karwin,

I letterali di data contano come stringhe nella maggior parte dei DBMS
Please_Dont_Bully_Me_SO_Lords

64

Le virgolette singole delimitano una costante stringa o una costante data / ora.

Le virgolette doppie delimitano gli identificatori, ad esempio nomi di tabelle o nomi di colonne. Questo è generalmente necessario solo quando l'identificatore non si adatta alle regole per identificatori semplici.

Guarda anche:

Puoi fare in modo che MySQL utilizzi le virgolette doppie secondo lo standard ANSI:

SET GLOBAL SQL_MODE=ANSI_QUOTES

È possibile fare in modo che Microsoft SQL Server utilizzi le virgolette doppie secondo lo standard ANSI:

SET QUOTED_IDENTIFIER ON

36

In ANSI SQL, le virgolette doppie citano i nomi degli oggetti (ad es. Tabelle) che consente loro di contenere caratteri non consentiti altrimenti, o essere gli stessi delle parole riservate (evitare questo, davvero).

Le virgolette singole sono per le stringhe.

Tuttavia, MySQL è ignaro dello standard (a meno che il suo SQL_MODE non venga modificato) e consenta che vengano utilizzati in modo intercambiabile per le stringhe.

Inoltre, Sybase e Microsoft usano anche parentesi quadre per la quotazione degli identificativi.

Quindi è un po 'specifico del fornitore.

Altri database come Postgres e IBM aderiscono allo standard ansi :)


4
MySql usa il backtick `per la citazione dell'identificatore. (solo per completamento)
dar7yl,

1
Esempio: se vuoi nominare una colonna di Postgres "data" (che è riservata), dovrai racchiuderla tra virgolette.
fny

9

Uso questo mnemonico:

  • Le virgolette singole sono per le stringhe (una cosa)
  • Le virgolette doppie sono per nomi di tabelle e nomi di colonne (due cose)

Questo non è corretto al 100% secondo le specifiche, ma questo mnemonico mi aiuta (essere umano).


1

La differenza sta nel loro utilizzo. Le virgolette singole vengono utilizzate principalmente per fare riferimento a una stringa in WHERE, HAVING e anche in alcune funzioni SQL integrate come CONCAT, STRPOS, POSITION ecc.

Quando si desidera utilizzare un alias con uno spazio intermedio, è possibile utilizzare virgolette doppie per fare riferimento a tale alias.

Per esempio

(select account_id,count(*) "count of" from orders group by 1)sub 

Ecco una sottoquery di una tabella ordini con account_id come chiave esterna che sto aggregando per sapere quanti ordini ha effettuato ciascun account. Qui ho dato a una colonna qualsiasi nome casuale come "count of" per motivi di scopo.

Ora scriviamo una query esterna per visualizzare le righe in cui "count of" è maggiore di 20.

select "count of" from 
(select account_id,count(*) "count of" from orders group by 1)sub where "count of" >20;

È possibile applicare lo stesso caso anche alle espressioni di tabella comune.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.