sql - 在 firebird 中使用 iif 更新 varchar 字段时出现空格

标签 sql firebird firebird2.5

执行此查询时我看到奇怪的结果

update sd_invodt set line_type=iif(is_promo=1, 'campaign', 'item')

line_type 字段中的值将为 "item " .值中有空格。
但是当我执行这个查询时
update sd_invodt set line_type='item'

我没有空格。

现在我必须使用修剪作为解决方法
update sd_invodt set line_type=trim(iif(is_promo=1, 'campaign', 'item'))

我使用最新的火鸟 2.5。 Line_type 是一个 varchar(15)。

这是 Firebird 中的错误吗?

编辑

我已经使用新数据库进行了测试,问题仍然存在。

最佳答案

iif()的结果类型取决于输入,如果是字符串,结果类型似乎是 char(x)哪里x是最长输入字符串的长度。因此"item"将填充 4 个空格以使其与“广告系列”一样长。我认为这是设计使然,但您可能想输入一张前往 FB issuetracker 的票。 .

所以iif()返回 "item "如果第一个参数为 false 并且您将空格存储到 varchar场,他们被保留下来。

关于sql - 在 firebird 中使用 iif 更新 varchar 字段时出现空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19739310/

相关文章:

SQL - 每种类型只给我 3 次匹配

sql - 数据库内的地址标准化

MySQL select with 语句

python - 将 kinterbasdb 与 py2exe 一起使用

sql - 如何在 Firebird 中使用 For 循环?

delphi - 是否可以为少量用户使用 Firebird Embedded

SQL Server 2012 中右外连接的 SQL 语法

c# - 使用 NHibernate 映射时无法覆盖类

firebird - 仅从文本中选择数字

c# - Firebird EXECUTE BLOCK 从 c# 和 Flamerobin 中抛出错误 104