我正在使用 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 将这些字符更新为空字符串吗?
免责声明:我不使用InterBase,而是使用它的兄弟/分支Firebird,但在这方面我认为它们足够接近,我可以提供答案。
问题是InterBase中的
CHAR(10)
仅是定义10个字符的固定长度数据类型的有效语法; CHAR
不是 InterBase 中定义字符值的函数。另外,InterBase 中的串联是用 ||
完成的,而不是 +
。
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) | '%'