Sql 如果where子句值超过列长度,查询是否可移植?

Sql 如果where子句值超过列长度,查询是否可移植?,sql,Sql,如果我有一个acct\u id CHAR(3)和类似的查询 select * from some_table where acct_id like '12%3%'; 大多数关系数据库会接受这个查询吗?还是会因为比较的值比列长而失败 换句话说:如果我的where子句超过了列的限制,那么该查询是否可以跨典型数据库(如MySql、DB2和Oracle)移植? 同样,对于=比较,而不是像这样的比较,也是如此吗 我在DB2(x86和大型机)上尝试了一个查询,它没有导致任何错误,但我不确定是否有其他数据库

如果我有一个
acct\u id CHAR(3)
和类似的查询

select * from some_table where acct_id like '12%3%';
大多数关系数据库会接受这个查询吗?还是会因为比较的值比列长而失败

换句话说:如果我的where子句超过了列的限制,那么该查询是否可以跨典型数据库(如MySql、DB2和Oracle)移植?

同样,对于
=
比较,而不是像
这样的比较,也是如此吗


我在DB2(x86和大型机)上尝试了一个查询,它没有导致任何错误,但我不确定是否有其他数据库。在提交之前,我查看了几个SO问题的标题。

在您的CHAR(3)列中可以找到的唯一匹配值是
'123'
,但是
%
运算符支持0或更多重复。没有理由拒绝测试

事实上,您甚至可以将acct_id='1234'
与一个复杂的优化器进行比较,优化器可能会意识到没有任何值会与之相等,并将该术语视为false。没有明显的理由将其作为“无效SQL”拒绝;这只是一个戏剧性优化的机会。

感谢我现在知道的评论,它在我尝试使用的每个数据库中都有效:

  • MySQL 5.5.30
  • 甲骨文11g R2
  • PostgreSQL 9.2.1
  • SQLite
  • MS SQL Server 2012
  • MS SQL Server 2008

另外,我在DB2 Express-C 9.7.5和DB2 on z/OS(大型机)9.1上试用了它,两种版本都能使用。

为什么你不能自己试用呢?我必须创建表和数据(加上安装几个数据库)。我想有人会一清二楚。使用并尝试不安装所有数据库。我已经为SQLServer2012进行了测试,运行良好-执行查询,但不返回任何结果。@MarcinJuraszek真棒!我以前从未用过。非常感谢你!!