是否可以使用 SQL 通过表达式引擎表达式创建索引?

发布于 2024-10-11 01:39:30 字数 345 浏览 4 评论 0原文

我们正在尝试在使用 Advantage 表达式引擎的 CDX 和 ADT 表上创建索引。

到目前为止,我们尝试的代码如下所示:

CREATE INDEX IDX1 ON TBL1 (STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD));

Is it possible to create an index with the expression STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD) using SQL?

我们尝试用双引号、单引号和方括号引用表达式。

We are trying to create an index on CDX and ADT tables that use the Advantage expression engine.

The code we tried so far looks like this:

CREATE INDEX IDX1 ON TBL1 (STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD));

Is it possible to create an index with the expression STR(SOME_NUMBER_FIELD,6)+DTOS(SOME_DATE_FIELD) using SQL?

We tried quoting the expression with double quotes, single quotes and brackets.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

神经暖 2024-10-18 01:39:30

您可以使用系统过程 sp_CreateIndex 来做到这一点:

execute procedure sp_CreateIndex( 'test', null, 'idx1',
           'str(empid,6)+dtos(doh)', null, 0, 0 );   

You can use the system procedure sp_CreateIndex to do that:

execute procedure sp_CreateIndex( 'test', null, 'idx1',
           'str(empid,6)+dtos(doh)', null, 0, 0 );   
若无相欠,怎会相见 2024-10-18 01:39:30

骨架语法是

CREATE INDEX index_name ON table_name(column_name);

因此,要使代码正常工作,需要发生两件事。

  1. 您的表达式必须计算为现有列的名称。
  2. 您的 dbms 必须接受列名称中的表达式。

我认为大多数 dbms 不接受列名表达式。但也许您可以评估表达式并提交有效的 SQL 字符串。

The skeleton syntax is

CREATE INDEX index_name ON table_name(column_name);

So two things need to happen for your code to work.

  1. Your expression has to evaluate to the name of an existing column.
  2. Your dbms has to accept expressions in column names.

I think most dbms don't accept expressions for column names. But perhaps you can evaluate the expression and submit a valid SQL string instead.

云柯 2024-10-18 01:39:30

马克的回答很正确。

对于 ADT 中的表达式索引,您应该注意的一件事是表达式中的任何 null 值都会将整个表达式的结果呈现为 null。这有时会导致开发人员从 CDX 切换到 ADT 时出现问题,因为 ADT 表支持 NULL 值。例如,如果 empid 或 doh 为 NULL,则上述表达式的结果将为 NULL。

另一件需要注意的事情是某些表达式索引可能无法用于 SQL 优化。如果您打算主要使用 SQL 来操作数据,那么最好使用标准 SQL 语法创建索引:

CREATE INDEX idx1 ON test( empid, doh )

服务器将负责为 CDX 和 ADT 索引使用正确的表达式。 SQL 引擎可以使用该索引来优化数据选择。

Mark's answer is spot on.

One thing that you should be aware of with expression index in ADT is that any null value in the expression will render the result of the whole expression null. This sometimes causes problem for developer switching from CDX to ADT because NULL value is supported in ADT table. For example, the result of the above expression will be NULL if either empid or doh is NULL.

Another thing to watch out for is that certain expression index may not be usable for SQL optimization. If you intend to mostly using SQL to manipulate the data, it may be better to create the index using the standard SQL syntax:

CREATE INDEX idx1 ON test( empid, doh )

The server will take care of using the correct expression for the CDX and ADT index. And the index will be usable by the SQL engine for optimizing selecting data.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文