目前正在使用 Firebird 1.5 数据库并尝试使用 SQL 以 native 正确的格式提取数据。
考虑以下数据库:
ID | Full Name
1 Jon Doe
2 Sarah Lee
我想要实现的是在查询中对全名字段(空格)进行简单拆分。
ID | First Name | Last Name
1 Jon Doe
2 Sarah Lee
面临的问题是 Firebird POSITION() 是在 v2.0 中引入的。是否有任何已知的解决方法来拆分任何人遇到的空间?
非常感谢您的帮助!
最佳答案
对于 Firebird 1.5,一个解决方案是找到一个 UDF,它要么结合这两个功能,要么提供位置(我不使用 UDF,所以我不确定是否已经存在)。如果没有可用的,您可能需要写一个。
另一种解决方案是为此功能编写存储过程,例如:Position of substring function in SP
CREATE PROCEDURE Pos (SubStr VARCHAR(100), Str VARCHAR(100))
RETURNS (Pos INTEGER) AS
DECLARE VARIABLE SubStr2 VARCHAR(201); /* 1 + SubStr-lenght + Str-length */
DECLARE VARIABLE Tmp VARCHAR(100);
BEGIN
IF (SubStr IS NULL OR Str IS NULL)
THEN BEGIN Pos = NULL; EXIT; END
SubStr2 = SubStr || '%';
Tmp = '';
Pos = 1;
WHILE (Str NOT LIKE SubStr2 AND Str NOT LIKE Tmp) DO BEGIN
SubStr2 = '_' || SubStr2;
Tmp = Tmp || '_';
Pos = Pos + 1;
END
IF (Str LIKE Tmp) THEN Pos = 0;
END
此示例(取自链接)可以扩展为然后使用 SUBSTRING
在空间上 split 。
对于像空格这样的单个字符的搜索,可能可以设计出比上述存储过程更简单的解决方案。为了您的确切需求,您可能需要专门为此目的编写一个可选择的存储过程。
但是,将您的数据库升级到 Firebird 2.5 会给您更多powerful internal functions可以简化此查询(以及您的生活)!
关于sql - Firebird 数据库在字段上拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23947502/