在 Ninox 中操作记录 ID

Ninox 中的记录 ID

  • Ninox 中的每条新记录都会被分配一个唯一的 ID(标识符)。
  • 对于新建的表,编号从 1 开始,每新增一条记录就递增 123 等)。
  • **已删除的 ID 不会被重新分配。**因此,表中最大的 ID 反映的是已创建记录的总数,其中包括那些已被删除、不再可见的记录。
  • ID 的表示形式:
    • ID 可以表示为数字,也可以表示为文本。
    • 表示为文本时,ID 由表的 ID(一个或多个大写字母)与记录编号组合而成。
      例如:"A1"

关于 ID 的要点

  • 把 ID 转换为文本:
    • 使用 string() 函数可获得 ID 的文本表示。
    • text() 函数只会把 ID 的数字部分作为文本返回。例如:"1"
  • 示例:
string(maTable.id); // Correct textual representation, e.g., "A1"
text(maTable.id);   // Only the numeric part as text, e.g., "1"
  • 在表达式中使用 ID:
    • 进行算术运算或字符串拼接时,ID 会采用另一侧数据的类型。
  • 示例:
var t := "Num ID: " + maTable.id;

输出:Num ID: 1

按 ID 查找记录

要在 where 子句中按 ID 取回一条记录,您可以使用数字,也可以使用文本表示。

使用数字:

select Customer where id = 1;

使用文本:

使用文本时,请确保 ID 同时包含表的 ID 和记录编号。

例如:

select Customer where id = "B1";

从 ID 中提取记录编号

这个函数可以从基于文本的 ID(例如 A1)中提取出记录编号:

function recordNumber(id : text) do
  "Capture the digit group.";
  number(extractx(id, "^[A-Z]+([0-9]+)$", "", "$1"))
end;

"Example: apply to the current record’s ID"
var numId := recordNumber(string(myId));

string(myId) 把 ID 转换为文本。

正则表达式 ^[A-Z]+([0-9]+)$ 的含义是

  • ^[A-Z]+ → 开头的一个或多个字母,
  • ([0-9]+) → 我们需要的数字(捕获组 1),
  • $ → 字符串结尾。

extractx(..., "", "$1") 只返回捕获到的数字。

number(...) 把该数字字符串转换成数字。