当我对 Windows 10 64 位 PC 上运行的 Firebird 数据库(版本 3.0.9)执行下面的 SQL 查询时。
SELECT * FROM AliasName WHERE AliasId=3. or 1=1--
我预计查询会因错误而失败,但奇怪的是 Firebird 执行查询时没有任何问题,并返回“AliasName”表中的所有三行
我在 Google 上搜索了“.”的用法Firebird 中的运算符,但找不到与我面临的问题相关的任何内容。
最佳答案
点不是运算符,而是小数点分隔符。这是精确数字文字的 SQL 标准语法,Firebird 在这里遵循该语法。引用 ISO/IEC 9075-2:2016(“SQL 标准”):
<exact numeric literal> ::=
<unsigned integer> [ <period> [ <unsigned integer> ] ]
| <period> <unsigned integer>
这个产生式规则使得 3.
与 3
一样有效。换句话说,它允许您指定小数点,而无需指定点后的任何数字。这也不是 Firebird 特有的,大多数(如果不是全部)SQL 实现都应用此语法规则。
这也在 Number literals 部分中指定。 Firebird 3.0 语言引用中的公共(public)语言元素章节:
<d>[<d> …] "." [<d> …]
不同之处在于 Firebird 中的文字 3
输入为 INTEGER
,而3.
输入为 BIGINT
(或NUMERIC(18, 0)
)。
关于sql - firebird 数据库查询中 '.' 运算符的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75741289/