Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Если значение переменных не имеется то не применять Where / 25 сообщений из 29, страница 1 из 2
23.08.2020, 07:10
    #39991700
Михаил Л
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
Добрый день.
Прошу помочь с кодом.
В коде есть две переменные, которые берут значение из ячеек 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
23.08.2020, 07:53
    #39991704
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
Код: sql
1.
where (id > переменная1 or переменная1 is null) and (id > переменная2 or переменная2 is null)
...
Рейтинг: 0 / 0
23.08.2020, 07:57
    #39991706
Михаил Л
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
Неужели так просто и понятно?! Спасибо!
Сейчас опробую
...
Рейтинг: 0 / 0
23.08.2020, 08:31
    #39991707
Михаил Л
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
court, я извиняюсь, выходит ошибка - Несоответствие типов данных в выражении условия отбора.
Получается надо вариант : автор(id > ? or ? is нечисло)
В поле id числа и если нет числа, то надо всю таблицу
...
Рейтинг: 0 / 0
23.08.2020, 09:16
    #39991710
Михаил Л
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
Прикрепил файл.
Надо при отсутствии значения в ячейке С1 получить всю таблицу
Базу данных в папку C:\Path\
Запрос виден по пути Данные-Подключение-Свойства-Определение
...
Рейтинг: 0 / 0
23.08.2020, 10:32
    #39991715
Сотрудник Главного Управления
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
Михаил Л, напишите функцию, которая принимает на вход строку и выдаёт на выходе целое число, если входная строка может быть преобразована в целое число,
и выдаёт на выходе null, если строка не может быть преобразована в число.
Затем эту функцию вы сможете применить в секции WHERE как показано выше, немного изменив код.
...
Рейтинг: 0 / 0
23.08.2020, 10:38
    #39991718
Михаил Л
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
Сотрудник Главного Управления
напишите функцию, которая ..
Спасибо, только это легко сказать.
Как они выглядят? Эти функции?
Это в Power Query я бы смог написать функцию, а в sql пока ничего писать не могу. Могу код нагуглить и применить)
...
Рейтинг: 0 / 0
23.08.2020, 11:48
    #39991730
Сотрудник Главного Управления
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
Михаил Л,

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

Код: 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
23.08.2020, 11:51
    #39991731
Сотрудник Главного Управления
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
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
23.08.2020, 11:53
    #39991732
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
-
...
Рейтинг: 0 / 0
23.08.2020, 15:49
    #39991755
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
Сотрудник Главного Управления
не, это не мой стиль
Убийственный аргумент.
А если id может быть отрицательным?
...
Рейтинг: 0 / 0
23.08.2020, 16:46
    #39991764
Сотрудник Главного Управления
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
iap
А если id может быть отрицательным?
в этом случае не прокатит

Вообще-то ни разу не встречал отрицательного id в пользовательских Excel-файлах.
А вы ?
...
Рейтинг: 0 / 0
23.08.2020, 18:24
    #39991782
Михаил Л
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
Сотрудник Главного Управления
Михаил Л, напишите функцию, которая принимает на вход строку и выдаёт на выходе целое число..
Посмотрев видео о функциях, я так понял что функции должны быть вместе с базой данных на сервере и тогда можно обращаться извне к этой функции.
Если это так, то мне не подходит этот вариант. У меня нет доступа к базе данных чтобы туда чт либо записывать.
У меня есть название сервера, название базы данных и имя пользователя+пароль.
...
Рейтинг: 0 / 0
23.08.2020, 18:53
    #39991791
Михаил Л
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
А можно на худой конец так сделать:
Если переменная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
23.08.2020, 19:14
    #39991797
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
авторпеременные, которые берут значение из ячеек Excel. Но в ячейках может и не быть значений.
Что значит "может не быть"? Проверьте как это запрос интерпретирует. Может вам надо сравнивать с пустой строкой типа ''.
...
Рейтинг: 0 / 0
23.08.2020, 19:22
    #39991798
Михаил Л
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если значение переменных не имеется то не применять Where
PizzaPizza

TRY_PARSE ?

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

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

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

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

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

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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Если значение переменных не имеется то не применять Where / 25 сообщений из 29, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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