2010-10-26 35 views
3

我正在查看SQL的語法,特別是character string literal解釋SQL的BNF

<character string literal> ::= 
    [ <introducer> <character set specification> ] 
    <quote> [ <character representation> ... ] <quote> 
    [ { <separator> <quote> [ <character representation> ... ] <quote> }... ] 

忽略[ <introducer> <character set specification> ]一部分,這意味着一個或多個由一個<separator>分離<quote> [ <character representation> ... ] <quote> S'

如果是這樣,是否意味着'hello' 'world'應該被解析爲一個<character string literal>

對於查詢SELECT 'hello' 'world',微軟SQL Server 2005倍中的回報:

+-------+ 
| world | 
+-------+ 
| hello | 
+-------+ 

和MySQL 5.0返回:

+------------+ 
| hello  | 
+------------+ 
| helloworld | 
+------------+ 

據我所知,SQL的每一種滋味是不同的,他們不全部遵循標準。我只是想確定我是否正確解釋BNF。謝謝。

+0

一個小布局點:SQL服務器返回列標題世界的值「hello」。 「世界」被解釋爲別名/標識符。好的問題... – gbn 2010-10-26 19:10:43

回答

2

If so, does that mean that 'hello' 'world' should be parsed as one ?

根據ANSI SQL,是的。

0

爲了闡明SQL Server中正在發生的事情,您實際上正在做的是使用'world'列名稱返回'hello'。你舉的例子是一樣的:

SELECT 'hello' AS 'world' 

如果您想進一步擴展你的思想,你會得到一個錯誤:

SELECT 'hello' 'world' 'now' 

Line 1: Incorrect syntax near 'now'. 
+0

謝謝,我從一開始就明白這一點。我的主要問題是關於BNF。 – jordanbtucker 2010-10-26 19:10:54

0

看那BNF爲<separator> ::=

+0

然後呢?我看不出這有什麼幫助。 – gbn 2010-10-26 19:15:17

+0

我將其解釋爲一個或多個 s。 – jordanbtucker 2010-10-26 19:19:42