LOBase HSQL 避免必须将 table 和字段名称放在引号中
LOBase HSQL avoid having to put table and field names in quote marks
将 LO Base 与本地 HSQL 数据库文件结合使用。
我想做的事:复制并粘贴我现有的(在某些情况下很长的)查询,其形式为:
SELECT table1.field1, table2.field2 FROM table1, table2 WHERE table1.id=table2.id
我要做的事情:
SELECT "table1"."field1", "table2"."field2" FROM "table1", "table2" WHERE "table1"."id"="table2"."id"
然后我注意到,当我使用 LO Base 连接到远程 MySQL 数据库和 运行 查询时,它在没有引号的情况下工作正常,但当数据源是本地 HSQL 数据库时失败.有没有办法解决?我不想编辑一大堆复杂的查询...感谢任何帮助
引号是必需的,除非 table 和字段名称是大写的,如 http://hsqldb.org/doc/2.0/guide/guide.html:
中所述
Standard SQL is not case sensitive, except when names of objects are enclosed in double-quotes... all uppercase for unquoted identifiers.
如果您不想这样做,请将数据移动到本地 MySQL 实例,或任何其他区分大小写且不带引号的数据库。
或者,编写正则表达式,在查询 运行 之前添加引号。这可以在 LibreOffice Calc 中完成,将原始查询放在一列中,然后在添加引号的下一列中放置 macro-based regular expression formula。
看起来这可能会变得复杂,所以我会在 Python 中而不是 Basic 中编写一个宏,因为有一个 regex library。这是一些示例代码。
import re
def quote_identifier(matchobj):
if matchobj.group(0).upper() in ('SELECT','FROM','WHERE'):
return matchobj.group(0)
else:
return '"{}"'.format(matchobj.group(0))
s = "SELECT table1.field1, table2.field2 FROM table1, table2 WHERE table1.id=table2.id"
result = re.sub("(\w+)", quote_identifier, s)
print(result)
这会打印引用的结果:
SELECT "table1"."field1", "table2"."field2" FROM "table1", "table2" WHERE "table1"."id"="table2"."id"
将 LO Base 与本地 HSQL 数据库文件结合使用。
我想做的事:复制并粘贴我现有的(在某些情况下很长的)查询,其形式为:
SELECT table1.field1, table2.field2 FROM table1, table2 WHERE table1.id=table2.id
我要做的事情:
SELECT "table1"."field1", "table2"."field2" FROM "table1", "table2" WHERE "table1"."id"="table2"."id"
然后我注意到,当我使用 LO Base 连接到远程 MySQL 数据库和 运行 查询时,它在没有引号的情况下工作正常,但当数据源是本地 HSQL 数据库时失败.有没有办法解决?我不想编辑一大堆复杂的查询...感谢任何帮助
引号是必需的,除非 table 和字段名称是大写的,如 http://hsqldb.org/doc/2.0/guide/guide.html:
中所述Standard SQL is not case sensitive, except when names of objects are enclosed in double-quotes... all uppercase for unquoted identifiers.
如果您不想这样做,请将数据移动到本地 MySQL 实例,或任何其他区分大小写且不带引号的数据库。
或者,编写正则表达式,在查询 运行 之前添加引号。这可以在 LibreOffice Calc 中完成,将原始查询放在一列中,然后在添加引号的下一列中放置 macro-based regular expression formula。
看起来这可能会变得复杂,所以我会在 Python 中而不是 Basic 中编写一个宏,因为有一个 regex library。这是一些示例代码。
import re
def quote_identifier(matchobj):
if matchobj.group(0).upper() in ('SELECT','FROM','WHERE'):
return matchobj.group(0)
else:
return '"{}"'.format(matchobj.group(0))
s = "SELECT table1.field1, table2.field2 FROM table1, table2 WHERE table1.id=table2.id"
result = re.sub("(\w+)", quote_identifier, s)
print(result)
这会打印引用的结果:
SELECT "table1"."field1", "table2"."field2" FROM "table1", "table2" WHERE "table1"."id"="table2"."id"