sql >> Database teknologi >  >> RDS >> PostgreSQL

Tabel- eller kolonnenavn kan ikke starte med numerisk?

Det kommer fra de originale sql-standarder, som gennem flere lag af indirekte til sidst får en identifikatorstart blok, hvilket er en af ​​flere ting, men primært er det "et simpelt latinsk bogstav". Der er også andre ting, der kan bruges, men hvis du vil se alle detaljerne, så gå til http://en.wikipedia.org/wiki/SQL-92 og følg linkene til den aktuelle standard ( side 85 )

At have ikke-numeriske identifikator-introducere gør det nemmere og hurtigere at skrive en parser til at afkode sql til udførelse, men en citeret form er også fint.

Rediger:Hvorfor er det nemmere for parseren?

Problemet for en parser er mere i SELECT -list-sætning end FROM klausul. Select-listen er listen over udtryk, der er valgt fra tabellerne, og denne er meget fleksibel, og tillader simple kolonnenavne og numeriske udtryk. Overvej følgende:

SELECT 2e2 + 3.4 FROM ...

Hvis tabelnavne og kolonnenavne kunne starte med numeriske, er 2e2 et kolonnenavn eller et gyldigt nummer (e format er typisk tilladt i numeriske bogstaver) og er 3.4 tabellen "3 " og kolonne "4 " eller er det den numeriske værdi 3.4 ?

At have reglen om, at identifikatorer start med simple latinske bogstaver (og nogle andre specifikke ting) betyder, at en parser, der ser 2e2 kan hurtigt se, at dette vil være et numerisk udtryk, samme aftale med 3.4

Selvom det ville være muligt at udtænke et skema til at tillade numeriske ledende tegn, kan dette føre til endnu mere obskure regler (opinion), så denne regel er en god løsning. Hvis du først tillod cifre, ville det altid være nødvendigt at citere, hvilket nok ikke er så 'rent'.

Ansvarsfraskrivelse , Jeg har forenklet ovenstående lidt og ignoreret korrelationsnavne for at holde det kort. Jeg er ikke helt bekendt med postgres, men har dobbelttjekket ovenstående svar i forhold til Oracle RDB-dokumentation og sql-specifikationer



  1. Hvordan kan jeg bruge en MySql brugerdefineret variabel i en .NET MySqlCommand?

  2. PostgreSQL komprimerede arkivlogfiler i Windows

  3. Den version af SQL Server, der er i brug, understøtter ikke datatypen datetime2?

  4. Forkert syntaks i nærheden af ​​søgeordet 'med'...forrige sætning skal afsluttes med semikolon