Dialetos SQL

O valor TSqlDialect controla o formato dos literais de data, hora, data e hora e booleanos em SQLExpression e SQLValues[]. Os literais de cadeia de caracteres e numéricos não são afetados pelo dialeto. O dialeto predefinido é sqlElevateDB. Defina-o uma vez por aplicação com SetSQLDialect ou especifique-o em cada chamada através da sobrecarga completa de ParseInput.

Identificadores de dialeto

Identificador Base de dados de destino
sqlMySQL MySQL 5.x+ / MariaDB 10.x+
sqlElevateDB ElevateDB 2.x+
sqlDBISAM DBISAM 4.x
sqlPostgreSQL PostgreSQL 9.x+
sqlMSSQLServer Microsoft SQL Server 2008+
sqlSQLite SQLite 3.x+
sqlFirebird Firebird 3+ / InterBase
sqlOracle Oracle 11g+
sqlAccess Microsoft Access (Jet / ACE)
sqlBDEParadox BDE / Paradox

Literais de data (itDate)

Dialeto Formato Exemplo
sqlMySQL DATE 'yyyy-mm-dd' DATE '2026-03-25'
sqlElevateDB DATE 'aaaa-mm-dd' DATE '2026-03-25'
sqlDBISAM 'aaaa-mm-dd' '2026-03-25'
sqlPostgreSQL DATE 'aaaa-mm-dd' DATE '2026-03-25'
sqlMSSQLServer 'aaaa-mm-dd' '2026-03-25'
sqlSQLite 'aaaa-mm-dd' '2026-03-25'
sqlFirebird DATE 'aaaa-mm-dd' DATE '2026-03-25'
sqlOracle TO_DATE('yyyy-mm-dd','YYYY-MM-DD') TO_DATE('2026-03-25','YYYY-MM-DD')
sqlAccess #yyyy-mm-dd# #2026-03-25#
sqlBDEParadox "dd.mm.yyyy" "25.03.2026"

Literais de tempo (itTime)

O sufixo [.fff] é incluído apenas quando os milissegundos são diferentes de zero. Zero milissegundos produz sempre um literal simples hh:mm:ss.

Dialeto Formato (sem ms) Formato (com ms) Notas
sqlMySQL TIME 'hh:mm:ss' TIME 'hh:mm:ss.fff' ms de 3 dígitos
sqlElevateDB TIME 'hh:mm:ss' TIME 'hh:mm:ss.fff' milissegundos de 3 dígitos
sqlDBISAM 'hh:mm:ss' 'hh:mm:ss.fff' ms de 3 dígitos
sqlPostgreSQL TIME 'hh:mm:ss' TIME 'hh:mm:ss.fff' ms de 3 dígitos
sqlMSSQLServer 'hh:mm:ss' 'hh:mm:ss.fff' ms de 3 dígitos
sqlSQLite 'hh:mm:ss' 'hh:mm:ss.fff' ms de 3 dígitos
sqlFirebird TIME 'hh:mm:ss' TIME 'hh:mm:ss.ffff' 4 dígitos (milésimos de milésimo, ms × 10)
sqlOracle TO_TIMESTAMP('hh:mm:ss','HH24:MI:SS') TO_TIMESTAMP('hh:mm:ss.fff','HH24:MI:SS.FF3') 3 dígitos (ms)
sqlAccess #hh:mm:ss# #hh:mm:ss# ms omitidos
sqlBDEParadox "hh:mm:ss" "hh:mm:ss" ms omitidos

Nota sobre o Firebird: O Firebird armazena tempos inferiores a um segundo como dez milésimos de segundo (0–9999). O parser multiplica os milissegundos analisados por 10 para produzir o valor de 4 dígitos. Por exemplo, 500 ms é armazenado como 5000 dezmilésimos e o literal é TIME '09:30:15.5000'.

Literais DateTime / TIMESTAMP (itDateTime)

O sufixo [.fff] / [.ffff] segue as mesmas regras que os literais de hora acima.

Dialeto Formato (sem ms) Formato (com ms) Notas
sqlMySQL 'yyyy-mm-dd hh:mm:ss' 'yyyy-mm-dd hh:mm:ss.fff' ms de 3 dígitos
sqlElevateDB TIMESTAMP 'yyyy-mm-dd hh:mm:ss' TIMESTAMP 'yyyy-mm-dd hh:mm:ss.fff' 3 dígitos de milissegundos
sqlDBISAM 'aaaa-mm-dd hh:mm:ss' 'aaaa-mm-dd hh:mm:ss.fff' 3 dígitos (ms)
sqlPostgreSQL TIMESTAMP 'aaaa-mm-dd hh:mm:ss' TIMESTAMP 'aaaa-mm-dd hh:mm:ss.fff' 3 dígitos (ms)
sqlMSSQLServer 'aaaa-mm-dd hh:mm:ss' 'aaaa-mm-dd hh:mm:ss.fff' 3 dígitos de milissegundos
sqlSQLite 'aaaa-mm-dd hh:mm:ss' 'aaaa-mm-dd hh:mm:ss.fff' ms de 3 dígitos
sqlFirebird TIMESTAMP 'aaaa-mm-dd hh:mm:ss' TIMESTAMP 'aaaa-mm-dd hh:mm:ss.ffff' 4 dígitos de dez milésimos (ms × 10)
sqlOracle TO_TIMESTAMP('yyyy-mm-dd hh:mm:ss','YYYY-MM-DD HH24:MI:SS') TO_TIMESTAMP('yyyy-mm-dd hh:mm:ss.fff','YYYY-MM-DD HH24:MI:SS.FF3') ms de 3 dígitos
sqlAccess #yyyy-mm-dd hh:mm:ss# #yyyy-mm-dd hh:mm:ss# ms omitidos
sqlBDEParadox "dd.mm.yyyy hh:mm:ss" "dd.mm.yyyy hh:mm:ss" ms omitidos

Literais booleanos (itBoolean)

Dialeto Verdadeiro Falso
sqlMySQL TRUE FALSE
sqlElevateDB TRUE FALSE
sqlDBISAM TRUE FALSE
sqlPostgreSQL TRUE FALSE
sqlMSSQLServer 1 0
sqlSQLite 1 0
sqlFirebird TRUE FALSE
sqlOracle 1 0
sqlAccess True False
sqlBDEParadox TRUE FALSE

Literais de cadeia de caracteres

Os literais de cadeia de caracteres são independentes do dialeto. Cada token itString é colocado entre aspas simples, seguindo a convenção QuotedStr do Delphi: as aspas simples internas são duplicadas.

O'Brien   →   'O''Brien'

Literais numéricos

Os literais inteiros, decimais e de ponto flutuante são independentes do dialeto. O separador decimal é sempre ., independentemente da localização do tempo de execução.

itDecimal: 1,99  →  1.9900
itFloat:   1,5   →  1.5

Padrões LIKE

A cláusula ESCAPE '\' anexada a expressões LIKE é independente do dialeto, com uma exceção: o sqlBDEParadox não recebe uma cláusula ESCAPE, uma vez que o suporte da camada SQL do BDE para a mesma não é fiável. Consulte Operadores para mais detalhes.

(C) 2026 Easygate, Lda