目前正在使用 Firebird 1.5 数据库,并尝试使用 SQL 以正确的格式本地提取数据。
考虑以下数据库:
ID | Full Name
1 Jon Doe
2 Sarah Lee
Run Code Online (Sandbox Code Playgroud)
我想要实现的是对查询中的全名字段(空格)进行简单的拆分。
ID | First Name | Last Name
1 Jon Doe
2 Sarah Lee
Run Code Online (Sandbox Code Playgroud)
面临的问题是 Firebird POSITION() 是在 v2.0 中引入的。是否有任何已知的解决方法可以在任何人遇到过的空间上进行分割?
非常感谢您的帮助!
对于Firebird 1.5,一种解决方案是找到一个结合了这两个功能或提供位置的UDF(我不使用UDF,所以我不确定是否已经存在)。如果没有可用的,您可能必须编写一个。
另一种解决方案是为此功能编写一个存储过程,例如: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
Run Code Online (Sandbox Code Playgroud)
这个示例(取自链接)可以扩展,然后用于SUBSTRING分割空间。
对于搜索单个字符(例如空格),可能可以设计比上述存储过程更简单的解决方案。为了满足您的具体需求,您可能需要专门为此目的编写一个可选择的存储过程。
然而,将数据库升级到 Firebird 2.5 将为您提供更强大的内部功能,从而简化此查询(以及您的生活)!
| 归档时间: |
|
| 查看次数: |
13830 次 |
| 最近记录: |