我正在研究SQL的语法,特别是character string literal。
<character string literal> ::=
[ <introducer> <character set specification> ]
<quote> [ <character representation> ... ] <quote>
[ { <separator> <quote> [ <character representation> ... ] <quote> }... ]
忽略[ <introducer> <character set specification> ]
部分,是否意味着由<quote> [ <character representation> ... ] <quote>
分隔的一个或多个<separator>
?
如果是,那是否意味着'hello' 'world'
应该被解析为一个<character string literal>
?
对于查询SELECT 'hello' 'world'
,Microsoft SQL Server 2005返回:
+-------+
| world |
+-------+
| hello |
+-------+
和MySQL 5.0返回:
+------------+
| hello |
+------------+
| helloworld |
+------------+
我知道SQL的每种风格都不同,并且它们并非都符合标准。我只是想确定我是否正确地解释了BNF。感谢。
答案 0 :(得分:2)
如果是这样,那是否意味着'hello''world'应该被解析为一个?
根据ANSI SQL,是的。
答案 1 :(得分:0)
为了澄清SQL Server中发生的事情,您实际做的是返回“hello”,列名为“world”。您的示例与:
相同SELECT 'hello' AS 'world'
如果您试图进一步扩展您的想法,则会收到错误:
SELECT 'hello' 'world' 'now'
Line 1: Incorrect syntax near 'now'.
答案 2 :(得分:0)
查看BNF <separator> ::=
。