-1

如果我有一个acct_id CHAR(3)和类似的查询

select * from some_table where acct_id like '12%3%';

大多数关系数据库会接受这个查询还是会因为我比较的值比列长而失败?

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

此外,对于=比较而不是,是否也是如此LIKE

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

4

2 回答 2

3

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

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

于 2013-03-22T20:11:24.350 回答
0

感谢@MarcinJuraszek在我现在了解SQL Fiddle的评论中,它在我尝试过的每个数据库中都有效:

  • MySQL 5.5.30
  • 甲骨文 11g R2
  • PostgreSQL 9.2.1
  • SQLite
  • 微软 SQL 服务器 2012
  • 微软 SQL 服务器 2008

另外,我在 DB2 Express-C 9.7.5 和 z/OS(大型机)9.1 上的 DB2 上进行了尝试,并且在两者中都有效。

于 2013-03-22T20:30:37.440 回答