powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Если значение переменных не имеется то не применять Where
29 сообщений из 29, показаны все 2 страниц
Если значение переменных не имеется то не применять Where
    #39991700
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Прошу помочь с кодом.
В коде есть две переменные, которые берут значение из ячеек Excel. Но в ячейках может и не быть значений. Что добавить в код чтобы в случае одного значения фильтровалась таблица только по одному значению, а если нет двух значений то возвращалась бы вся таблица без фильтрации. Например код такой:авторselect * from students where id > переменная1 and id < переменная2
Надо типа:
авторselect * from students where (if переменная1=NULL then пропускаем условие else id > переменная1) and (if переменная2=NULL then пропускаем условие else id < переменная2)
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991704
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
where (id > переменная1 or переменная1 is null) and (id > переменная2 or переменная2 is null)
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991706
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели так просто и понятно?! Спасибо!
Сейчас опробую
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991707
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court, я извиняюсь, выходит ошибка - Несоответствие типов данных в выражении условия отбора.
Получается надо вариант : автор(id > ? or ? is нечисло)
В поле id числа и если нет числа, то надо всю таблицу
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991710
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прикрепил файл.
Надо при отсутствии значения в ячейке С1 получить всю таблицу
Базу данных в папку C:\Path\
Запрос виден по пути Данные-Подключение-Свойства-Определение
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991715
Сотрудник Главного Управления
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л, напишите функцию, которая принимает на вход строку и выдаёт на выходе целое число, если входная строка может быть преобразована в целое число,
и выдаёт на выходе null, если строка не может быть преобразована в число.
Затем эту функцию вы сможете применить в секции WHERE как показано выше, немного изменив код.
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991718
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сотрудник Главного Управления
напишите функцию, которая ..
Спасибо, только это легко сказать.
Как они выглядят? Эти функции?
Это в Power Query я бы смог написать функцию, а в sql пока ничего писать не могу. Могу код нагуглить и применить)
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991730
Сотрудник Главного Управления
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л,

Ну вот, например

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR ALTER FUNCTION dbo.f_string_to_int(@Number VARCHAR(10)) RETURNS INT
AS
BEGIN
	RETURN TRY_PARSE(@Number as INTEGER)
END
GO


SELECT dbo.f_string_to_int('Vasya'), dbo.f_string_to_int(''), dbo.f_string_to_int('987654321'), dbo.f_string_to_int('-32'),  dbo.f_string_to_int('2500111222')
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991731
Сотрудник Главного Управления
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court
Код: sql
1.
where (id > переменная1 or переменная1 is null) and (id > переменная2 or переменная2 is null)

не, это не мой стиль
я бы сделал так

Код: sql
1.
where (id > ISNULL(переменная1, -1)) and (id > ISNULL(переменная2, -1))
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991732
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991755
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сотрудник Главного Управления
не, это не мой стиль
Убийственный аргумент.
А если id может быть отрицательным?
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991764
Сотрудник Главного Управления
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap
А если id может быть отрицательным?
в этом случае не прокатит

Вообще-то ни разу не встречал отрицательного id в пользовательских Excel-файлах.
А вы ?
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991782
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сотрудник Главного Управления
Михаил Л, напишите функцию, которая принимает на вход строку и выдаёт на выходе целое число..
Посмотрев видео о функциях, я так понял что функции должны быть вместе с базой данных на сервере и тогда можно обращаться извне к этой функции.
Если это так, то мне не подходит этот вариант. У меня нет доступа к базе данных чтобы туда чт либо записывать.
У меня есть название сервера, название базы данных и имя пользователя+пароль.
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991791
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно на худой конец так сделать:
Если переменная1 нет среди значений столбца id, то выводить всю таблицу.
Типа: авторSELECT * FROM DataAuto where
if Year = ? and (? in SELECT DISTINCT Year FROM DataAuto = TRUE)
then DataAuto where if Year = ?
else FROM DataAuto
Как это правильно написать?
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991797
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпеременные, которые берут значение из ячеек Excel. Но в ячейках может и не быть значений.
Что значит "может не быть"? Проверьте как это запрос интерпретирует. Может вам надо сравнивать с пустой строкой типа ''.
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991798
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza

TRY_PARSE ?

Не знаю что надо. Можете это кодом написать?
как то так:авторIF (? in SELECT DISTINCT Year FROM DataAuto = TRUE)
THEN SELECT * FROM DataAuto where Year = ?
ELSE SELECT * FROM DataAuto
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991801
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну у вас сравнение с отсутствующим значением должно быть, что бы это ни значило.
Если у вас там пустая строка, то вы сравниваете строку с числом, и получаете ошибку, поэтому вам надо привести ваше "отсутствующее значение" к такому, с которым можно сравнивать.
Выясните, что там у вас на самом деле за тип данных, когда "отсутствует значение"
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991807
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza
что там у вас на самом деле за тип данных, когда "отсутствует значение"

Не знаю, может текст нулевой длины.
Вообще если отсутствующее значение разделить на один, то возвращает ноль. Если в ячейке будет текст, например, "а", то при делении будет ошибка.
При пустом значении 0авторпеременная1/1 = 0
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991810
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza
Может вам надо сравнивать с пустой строкой типа ''

Вот именно с этой строкой такого типа!
Вся суть:
Есть в ячейках значения для переменной - значит фильтруем таблицу.
Нет в ячейках значения для переменной - значит выводим всю таблицу
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991826
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza
надо сравнивать с пустой строкой типа ''.
Скорее всего при пустом значении возвращается не только Null или '', а что-то еще. Что не представляется возможным узнать.
На этом прошу дальше этот вопрос не решать, так как ставлю точку и делаю вывод что эта задача нерешаема.
Всем спасибо
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991828
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л,

вам надо сделать несколько вариантов запроса для состояния переменных "известно" и "неизвестно" и выбирать варианты по состоянию переменных.
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991837
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
надо сделать несколько вариантов запроса для состояния переменных "известно" и "неизвестно" и выбирать варианты по состоянию переменных.
А можно в несложном коде этот вариант выбора
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991838
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л,

IF переменная1 IS NULL
SELECT первый вариант без переменной
ELSE
SELECT второй вариант с переменной
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991842
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов, спасибо! Проблема решается таким вариантом. Завтра загружу готовый вариант
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991863
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов

IF переменная1 IS NULL
Спасибо, но не сработало. Допускается первой командой только select, update, delete, insert, procedure. Обращение идет к базе данных Access, а там, я так понимаю, древний sql, который не обновляется. Потому не все пропускает.
Зато сработал первый вариант от court .
авторSelect * From [DataAuto] Where (([Year] = ? and ? is not null ) or ([Year] in (SELECT DISTINCT Year FROM DataAuto) and ? = 0 )) and (Код > ?)
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39991915
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Л,

не сработало в каком смысле? Вы в аксес не знаете, как проверить переменную на NULL? IF пишите на на VB, затем выполняйте SELECT на SQL server.
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39992001
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
не сработало в каком смысле? Вы в аксес не знаете, как проверить переменную на NULL?
Да, я не знаю как проверить в access переменную. И к базе данных напрямую доступа нет, только запросами. В последнем приложенном файле можно опробовать, добавив IF в начале запроса. Выскочит ошибка. Там обращение идет через Query, при других обстоятельствах все бы, наверное, сработало бы. что еще сказать..
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39994905
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сотрудник Главного Управления
court
Код: sql
1.
where (id > переменная1 or переменная1 is null) and (id > переменная2 or переменная2 is null)

не, это не мой стиль
я бы сделал так

Код: sql
1.
where (id > ISNULL(переменная1, -1)) and (id > ISNULL(переменная2, -1))



Так более универсально:
Код: sql
1.
where (id > ISNULL(переменная1, ID-1)) and (id > ISNULL(переменная2, ID-1))
...
Рейтинг: 0 / 0
Если значение переменных не имеется то не применять Where
    #39995089
Михаил Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL, спасибо! Вечером посмотрю внимательнее
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Если значение переменных не имеется то не применять Where
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]