SQL для сравнения двух диапазонов чисел друг с другом, ища перекрытия - PullRequest
0 голосов
/ 26 мая 2019

Простой пример того, что я пытаюсь выполнить:

Если у меня есть два диапазона чисел, таких как

beginA, endA (это диапазон, который я хочу сравнитьв базу данных, чтобы проверить на совпадение)

начало B, окончание B (это диапазон, который уже находится в базе данных)

Могу ли я сравнить их, чтобы найти перекрытие без зацикливания или создания списков (мойбаза данных будет неуправляемой, если я пойду этим путем)

Я могу заставить это работать, если я использую список для первого диапазона и имею таблицу, содержащую каждое число в качестве записи для второго диапазона.Однако таблица, которая будет содержать уже использованные серийные номера, в конечном итоге будет содержать миллионы строк, поэтому я пытаюсь избежать этого маршрута.


 public static string VerifyManufacturingSerialOnly(int beginning, int ending)
        {

            OleDbConnection connection = BadgeDatabaseDB.GetConnection();

            string checkStatement
                = "SELECT OrderNumber, MfgBeginningSerial, MfgEndingSerial "
                + "FROM Orders "
                + "WHERE MfgBeginningSerial "
                + "BETWEEN @beginning AND @ending "
                + "OR MfgEndingSerial "
                + "BETWEEN @beginning AND @ending";


            OleDbCommand selectCommand =
                new OleDbCommand(checkStatement, connection);

            selectCommand.Parameters.AddWithValue("@beginning", beginning);
            selectCommand.Parameters.AddWithValue("@ending", ending);

            // default string if no duplicates found
            string duplicateSerials = "No duplicates found.";

            try
            {
                connection.Open();
                OleDbDataReader dataReader = selectCommand.ExecuteReader();

                if (dataReader.Read())
                {
                    duplicateSerials 
                        = "There is overlap with: \n\n     Order #  "
                        + dataReader["OrderNumber"].ToString()
                        + "\n     Serial #'s "
                        + dataReader["MfgBeginningSerial"].ToString()
                        + " - "
                        + dataReader["MfgEndingSerial"].ToString();
                }
            }
            catch (OleDbException ex)
            {
                throw ex;
            }
            finally
            {
                connection.Close();
            }

            return duplicateSerials;
        }

Это возвращает строку, которая говорит, что естьперекрываются с заказом, даже если нет перекрытия.Возможно, это только мой синтаксис?

1 Ответ

0 голосов
/ 26 мая 2019

Стреляй, ложная тревога.Это работает, но у меня были поля серийного номера базы данных как текст, а новые числа как целые числа.После того, как я изменил поля базы данных на числа, я получаю ожидаемые результаты.

Как FYI, я использую базу данных Access, и да, я хотел, чтобы конечные числа были включены.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...