2013-03-22 3 views
-1

Если у меня есть acct_id CHAR(3) и запрос типа- это запрос переносимый, если значение where-where превышает длину столбца?

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

наиболее реляционных баз данных принимает этот запрос или будет какой-то не потому, что я сравниваю значение больше, чем колонки?

Другими словами: будет ли этот запрос переносимым через типичные базы данных (например, MySql, DB2 и Oracle), если предложение where where превышает предел столбца?

То же самое верно для сравнения = вместо LIKE?

Я пробовал запрос по DB2 (x86 и мэйнфрейм), и он не вызывал никаких ошибок, но я не был уверен в других базах данных. Перед отправкой я просмотрел заголовки нескольких вопросов SO.

+1

Почему вы не можете просто попробовать это самостоятельно? – MarcinJuraszek

+0

Мне пришлось бы создавать таблицы и данные (плюс установить несколько баз данных). Я подумал, что кто-то знает его голову. –

+3

Используйте http://sqlfiddle.com и попробуйте без установки всех баз данных. Я уже тестировал SQLServer 2012 и отлично работает - запрос выполняется, но ничего не возвращает. – MarcinJuraszek

ответ

3

Единственное значение, которое можно найти в столбце CHAR (3), которое будет соответствовать, равно '123', но операторы % поддерживают 0 или более повторений. Нет причин для отклонения теста.

Фактически, вы могли бы даже сравнить WHERE acct_id = '1234', и сложный оптимизатор может понять, что никакое значение не будет равным этому, и обработать термин как ложный. Нет очевидной причины, почему это должно быть отклонено как «недопустимый SQL»; это просто возможность для резкой оптимизации.

0

Благодаря @MarcinJuraszek в комментариях я теперь знаю о SQL Fiddle, и она работала в каждой БД я пробовал с:

  • MySQL 5.5.30
  • Oracle 11g R2
  • PostgreSQL 9.2.1
  • SQLite
  • MS SQL Server 2012
  • MS SQL Server 2008

Плюс Я попробовал это на DB2 Express-C 9.7.5 и DB2 на z/OS (мэйнфрейм) 9.1, и он работал в обоих.

Смежные вопросы