- Как сделать выборку некоторой части записей из таблицы? Есть ли в MSSQL нормальный аналог MySQLевского LIMITа? В инете нашел только кривые приемы типа вложенного SELECTа и вывода указанного в процентах количества записей. В данный момент для выбора записей с 50 по 100 из таблицы использую: SELECT TOP 50 * FROM (SELECT TOP (50 + 100) FROM `org` ORDER BY `title` ASC) ORDER BY `title` DESC Результат - записи с 50 по 100 в обратном порядке (порядок не важен собственно). Но это по моим представлениям жутко криво и 2 ORDER BYя вовсе не повышают производительность. - Как организовать нормальный pattern matching в MSSQL? Задача: есть поле `phone` в котором телефоны могут быть записаны как минимум 3 способами "123456", "123-456", "12-34-56". Как мне в выборке получить все 3 варианта написания, используя в запросе только первый вариант? Я сейчас тупо формирую запрос перебором вариантов написания: SELECT * FROM `org` WHERE `phone` = "123456" OR `phone` = "123-456" OR `phone` = "12-34-56" Это частный случай, так как телефон может записан и так: "1-23456". Вариант (SELECT * FROM `org` WHERE `phone` LIKE "12*34*56") не подходит, так как этому условию может удовлетворять "127689 553465 673256". Как я понял функция Replace не может быть использована в этой ситуации, то есть я не могу написать (SELECT * FROM `org` WHERE "123456" = Replace(`phone`, "-", "")). Как же быть? я наверняка не знаю простого механизма. Так как я даже не знаю с MSSQL ли я имею дело (хотя судя по геморрою уверен что да), то опишу ситуацию: программа написана с использованием C++ & MFC. К БД доступ организован через CDaoDatabase и CDaoRecordset, данные хранятся в *.mdb файле. Помогите пожалуйста, так как мне либо очень невезет с поиском решения, либо проблема действительно неразрешима.
В общем-то, mdb - это Access. И, навскидку: почему телефон не хранится в нормализованном виде, без дефисов? Или так: при сравнении предварительно уберите дефисы и сравнивайте нормализованную форму.
Именно. Даже отвечать не буду. Учить SQL. SQL это декларативный язык. PS Запрос в вопросе написан неграмотно.
ну вот так получилось. поле телефон - это просто varchar(255), куда вводятся телефоны через запятую. я понимаю что это неправильно, но мне нужно решение в рамках этой структуры. Я так и пытался сделать. SELECT * FROM `org` WHERE "123456" = Replace(`phone`, "-", ""). нельзя так в MSSQL Хочется получать одним запросом все нужные записи, чтобы потом курсором не прыгать никуда. Банально. Могли бы не утруждать себя ответом.
1. "выборка некоторой части" организуется (в MS SQL) с помощью временной таблицы, но опять, "а смысл"? 2. для "нормального pattern matching" сделайте нормальную схему БД. ПС. в школу. jek, "... учить SQL ... " и теорию РСУБД.
ладно, ладно пойду под нары залезу. тем не менее спасибо, я уже понял что на MSSQL не получится так же удобно как на MySQL выразить свой "вопрос" к базе данных.
Кстати да, интересует этот вопрос. Нашел в журнале только подобный костыль(через подзапрос с DESC). Для чего это надо? Например разбить вывод записей по страницам на сайте?