热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Firebird数据库分裂字符串在字段上-FirebirdDatabaseSplitStringonField

CurrentlyworkingwithaFirebird1.5databaseandattemptingtopullthedatainthecorrectformat

Currently working with a Firebird 1.5 database and attempting to pull the data in the correct format natively with SQL.

目前正在使用Firebird 1.5数据库并尝试使用SQL本地提取正确格式的数据。

Consider the following database:

考虑以下数据库:

ID | Full Name
 1   Jon Doe
 2   Sarah Lee 

What I am trying to achieve is a simple split on the full name field (space) within a query.

我想要实现的是对查询中的全名字段(空格)进行简单拆分。

ID | First Name | Last Name
1     Jon          Doe
2     Sarah        Lee 

The issue faced is Firebird POSITION() was introduced in v2.0. Is there any known workaround to split on a space that anyone has come across?

面临的问题是Firebird POSITION()在v2.0中引入。是否有任何已知的解决方法可以拆分任何人遇到过的空间?

Much appreciate your assistance!

非常感谢您的帮助!

3 个解决方案

#1


3  

For Firebird 1.5 a solution is to find a UDF that either combines both functions, or provides the position (I don't use UDFs, so I am not sure if one already exists). If none is available you might have to write one.

对于Firebird 1.5,解决方案是找到一个UDF,它既可以组合两个函数,也可以提供位置(我不使用UDF,所以我不确定是否已存在)。如果没有,你可能需要写一个。

The other solution is to write a stored procedure for this functionality, see for example: Position of substring function in SP

另一种解决方案是为此功能编写存储过程,例如参见: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

This example (taken from the link) can be extended to then use SUBSTRING to split on the space.

此示例(取自链接)可以扩展为然后使用SUBSTRING在空间上拆分。

For search on a single character like a space a simpler solution can probably be devised than above stored procedure. For your exact needs you might need to write a selectable stored procedure specifically for this purpose.

对于像空间这样的单个字符的搜索,可能设计出比上述存储过程更简单的解决方案。为满足您的确切需求,您可能需要专门为此目的编写可选择的存储过程。

However, upgrading your database to Firebird 2.5 will give you much more powerful internal functions that simplify this query (and your life)!

但是,将数据库升级到Firebird 2.5将为您提供更强大的内部功能,以简化此查询(以及您的生活)!

#2


0  

You could use a UDF, but that isn't strictly SQL

您可以使用UDF,但这不是严格的SQL

you could write a stored procedure to parse and split but thats not strictly SQL either

你可以编写一个存储过程来解析和拆分,但这不是严格的SQL

#3


0  

I also wanted to split a full name string to first and last name and I used the following SQL statements in firebird 2.1 Database:

我还想将全名字​​符串拆分为名字和姓氏,我在firebird 2.1数据库中使用了以下SQL语句:

Patients is the table name. The Name field holds the full name string e.g.: "Jon Doe". The FIRST_NAME field will store the first name and the LAST_NAME field the last name

患者是表名。 Name字段包含全名字符串,例如:“Jon Doe”。 FIRST_NAME字段将存储名字,LAST_NAME字段将存储姓氏

First get the first name (string part before the first space) and execute a TRIM UPDATE statement to remove any spaces.

首先获取第一个名称(第一个空格之前的字符串部分)并执行TRIM UPDATE语句以删除任何空格。

UPDATE "Patients" SET "Patients".FIRST_NAME = (SUBSTRING("Patients"."Name" FROM 1 FOR (POSITION(' ' IN "Patients"."Name"))))
UPDATE "Patients" SET "Patients".FIRST_NAME = TRIM(BOTH ' ' FROM "Patients".FIRST_NAME)

Then get the last name (the string after the first space) and execute a TRIM UPDATE statement to remove any spaces

然后获取姓氏(第一个空格后面的字符串)并执行TRIM UPDATE语句以删除任何空格

UPDATE "Patients" SET "Patients"."LAST_NAME" = (SUBSTRING("Patients"."Name" FROM (POSITION(' ' IN "Patients"."Name")+1)))
UPDATE "Patients" SET "Patients".LAST_NAME = TRIM(BOTH ' ' FROM "Patients".LAST_NAME)

The result will be:

结果将是:

ID | NAME      | FIRST_NAME | LAST_NAME
1    Jon Doe     Jon          Doe
2    Sarah Lee   Sarah        Lee 

推荐阅读
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 本文介绍了如何使用Java代码通过SimpleDateFormat类来获得只有年月日的Date对象,并解释了在日期格式化和解析过程中需要注意的问题。同时提供了示例代码和异常处理方法。 ... [详细]
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
author-avatar
文巧语
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有