InterBase 在数据库中找到这些字符(代码 13:回车(CR) 代码 10:换行(LF))

问题描述 投票:0回答:1

我正在使用 InterBase 2007 连接和更新数据库中的信息。我正在从 SQL Server 数据库导入数据,同时在 DBgrid 中使用 Delphi 处理 InterBase 数据库.gdb 文件

我在某些字段中出现换行符

"Cabezanellosa
, Salamanca"

虽然W希望它像

"Cabezanellosa, Salamanca"

复制中断字符并在https://apps.timwhitlock.info/unicode/inspect上搜索后,我得到的字符是十进制的UTF-8(10)和UTF-8(13)。我想用空字符串替换它们。

我使用我办公室制作的程序将数据导出到文本文件。当任何字段有此换行符时,该软件将停止运行并显示错误。

在 SQL Server 中工作时,我可以使用此查询轻松查找和替换这些字符

SELECT * FROM data WHERE BIRTH_PLACE LIKE '%' + CHAR(10) + '%' OR BIRTH_PLACE LIKE '%' + CHAR(13) + '%'
UPDATE data 
SET BIRTH_PLACE = REPLACE(REPLACE(BIRTH_PLACE, CHAR(10), ''), CHAR(13), '')
WHERE BIRTH_PLACE LIKE '%' + CHAR(10) + '%' OR BIRTH_PLACE LIKE '%' + CHAR(13) + '%'

此查询在 InterBase 2007 中不起作用。我还尝试了来自多个 AI 网站的不同 AI 生成的查询,如 chatGPT、Claude、Copilot 但它们都不起作用。

有什么方法可以使用 InterBase 2007 将这些字符更新为空字符串吗?

sql interbase
1个回答
0
投票

免责声明:我不使用InterBase,而是使用它的兄弟/分支Firebird,但在这方面我认为它们足够接近,我可以提供答案。

问题是InterBase中的

CHAR(10)
仅是定义10个字符的固定长度数据类型的有效语法;
CHAR
不是 InterBase 中定义字符值的函数。另外,InterBase 中的串联是用
||
完成的,而不是
+

为了能够定义字符值,您需要使用 UDF

ascii_char
。 UDF不是InterBase的SQL语言中内置的,而是必须在当前数据库中显式定义。如果您的数据库尚未定义它,您将需要使用以下命令显式定义它:

DECLARE EXTERNAL FUNCTION ascii_char
INTEGER
RETURNS CSTRING(1) FREE_IT
ENTRY_POINT 'IB_UDF_ascii_char' MODULE_NAME 'ib_udf';

然后您可以在查询中使用它,例如:

SELECT * 
FROM data 
WHERE BIRTH_PLACE LIKE '%' || ascii_char(10) || '%' 
OR BIRTH_PLACE LIKE '%' || ascii_char(13) | '%'
© www.soinside.com 2019 - 2024. All rights reserved.