我想在monetdb中使用引号获取标识符。
假设我有一个表tableA
,其中包含两列ColumnA
和ColumnB
。
我希望动态设置报价。如果我的ColumnA
被引用且columnB
不是,则应为ColumnB
添加引号。
select "columnA", ColumnB from "tableA"
查询应按以下查询
select "columnA", "columnB" from "tableA"
我有一个场景,我正在获取动态查询。 对于某些标识符(列名称),我们得到的是引用,有些则不是。 我想让它统一起来。像那些列名称没有引用它应该在monetdb中为它们添加qoute
〔实施例 选择" tableA" .ColumnnameA,tableA.ColumnB from" tableA" 当我执行上述查询时,我会得到错误没有这样的列' tableA.ColumnB' 但是当我将引号添加到第二列表名时它可以正常工作
选择" tableA" .ColumnnameA," tableA" .ColumnB来自" tableA" 此查询对我有用,但我无法手动为所有查询添加引号。是否存在我可以在monetDB中设置的属性,以便在缺少时添加引用。
我可以在monetDB中实现相同的功能吗?
答案 0 :(得分:0)
我担心MonetDB中不可能,或者 - 我希望 - 在任何其他SQL数据库中。
原因是SQL标准将SQL定义为不区分大小写,因此标识foo
,Foo
,fOo
和FOO
被认为是相同的。但是,在双引号内,允许使用奇怪的字符并且大小写很重要,因此"foo"
,"Foo"
,"fOo"
和"FOO"
是不同的。
事实上,MonetDB将foo
,Foo
,fOo
和FOO
全部映射到"foo"
,如下例所示:
sql>create table foo(i int, "J" int);
create table foo(i int, "J" int);
operation successful (8.551ms)
sql>select i from foo;
select i from foo;
+---+
| i |
+===+
+---+
0 tuples (1.464ms)
sql>select "i" from foo;
select "i" from foo;
+---+
| i |
+===+
+---+
0 tuples (2.686ms)
sql>select "I" from foo;
SELECT: identifier 'I' unknown
所以,总结一下,你最好是
a)引用所有列名,确保大小写正确,或
b)没有引用任何列名,所以情况并不重要。
如果有疑问,我会选择(a)选项,因为它可能是未来的最佳证据。
Joeri