powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Null - это строка?
25 сообщений из 26, страница 1 из 2
Null - это строка?
    #32863413
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть запрос с полями А(текст) и В(число).
Есть запрос с полями D(текст) и Null.

Делаю Union, получаю во втором столбце тип данных - текст.

Аналогичная проблема при использовании IIF(A=0,Null,A). Если А - число, столбец все равно станет строкой. Ладно бы я использовал "", а то ведь Null - он же в любом столбце может быть.

Вопрос: как избежать ненужное преобразование к типу "текст"?
...
Рейтинг: 0 / 0
Null - это строка?
    #32863430
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
преобразовав Null во что-то полезное посредством NZ(...)
...
Рейтинг: 0 / 0
Null - это строка?
    #32863448
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так мне наоборот Null нужен. Но чтобы весь столбец не стоновился строкой.

Как вариант можно сделать аппенд во временную таблицу, но не хотелось бы.
...
Рейтинг: 0 / 0
Null - это строка?
    #32863465
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно бы я использовал "", а то ведь Null - он же в любом столбце может быть.
Так и используй ""
...
Рейтинг: 0 / 0
Null - это строка?
    #32863490
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я непонятно обяснил.
Мне нужет столбец содержащий цифры и пустые значения. Такой чтобы можно было производить с ними арифметические операции (группировки).
Если в одном запросе у меня цифры, в другом стоит Null и делается union, то столбец становится как строка. И на него уже нельзя делать Sum и прочее.
...
Рейтинг: 0 / 0
Null - это строка?
    #32863501
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CtrlAltМожет я непонятно обяснил.
Мне нужет столбец содержащий цифры и пустые значения. Такой чтобы можно было производить с ними арифметические операции (группировки).
Если в одном запросе у меня цифры, в другом стоит Null и делается union, то столбец становится как строка. И на него уже нельзя делать Sum и прочее.
Дык что все таки мешает поставить "" вместо null?
...
Рейтинг: 0 / 0
Null - это строка?
    #32863545
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Всеволод, ты уверен, что "" - это не строка?
...
Рейтинг: 0 / 0
Null - это строка?
    #32863546
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычВсеволод, ты уверен, что "" - это не строка?
Ага
'' - вот это строка
...
Рейтинг: 0 / 0
Null - это строка?
    #32863547
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикладываю простую базу.

Запрос Res_1 работает. Res_2 не работает.
Обрати внимание на объединение U.
...
Рейтинг: 0 / 0
Null - это строка?
    #32863569
Звереныш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с чего Вы простите решили, что там текст??? Число как число :)
Особенно если обратить внимание по какому краю равняет Акес второй столбец...
...
Рейтинг: 0 / 0
Null - это строка?
    #32863570
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут забыл упоминуть, что Access 97.
Проверил на 2000, в нем оказывается все правильно работает. :(
...
Рейтинг: 0 / 0
Null - это строка?
    #32863575
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я прошу прощения, но можно пояснить, что значит "Res_2 не работает"?
Res_1 и Res_2 работают абсолютно одинаково
---
Далее. В запросе U ты объединил запросы Q1 и Q2.
Я сделал запрос
Код: plaintext
1.
SELECT sum(U.B) as a
FROM U;
в результате получил 10 (число)
Что тут не так?
...
Рейтинг: 0 / 0
Null - это строка?
    #32863577
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да, у меня А2000
...
Рейтинг: 0 / 0
Null - это строка?
    #32863578
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Vsevolod V'' - вот это строка
А "" тогда что по-твоему? Неужто число?
...
Рейтинг: 0 / 0
Null - это строка?
    #32863583
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч Vsevolod V'' - вот это строка
А "" тогда что по-твоему? Неужто число?
хз что, но точно не строка :)
Просто у меня была типовая проблема и с двойными ковычками работало все нормально :)
...
Рейтинг: 0 / 0
Null - это строка?
    #32863816
Звереныш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати вот такой вот запрос дает некую пищу для размышлений (какую - я еще не понял )
SELECT U.A, U.B, TypeName( ) AS С FROM U;
Чего бы с этими тайпами сотворить..... :))
...
Рейтинг: 0 / 0
Null - это строка?
    #32863821
Звереныш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьфу тэги проклятые!
SELECT U.A, U.B, TypeName([B ]) AS Выражение1
FROM U;
...
Рейтинг: 0 / 0
Null - это строка?
    #32863854
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗверенышТьфу тэги проклятые!
От проклятья можно избавиться с помощью освященного тега SRC
Аминь :)
...
Рейтинг: 0 / 0
Null - это строка?
    #32863881
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольно, если TypeName добавить в начальные запросы Q1 и Q2, тогда запрос U все равно будет показывать Long, хотя это уже стали строки...
...
Рейтинг: 0 / 0
Null - это строка?
    #32864340
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю как у Вас, у меня в Аксе 97

1. Если Null идет из таблицы, то он имеет тип такой же как и поле в таблице!
2. А вот если он пробит константой, тогда действительно Акс считает что это константа текстового типа и приводит весь столбец к стринге

Из чего возникает вопрос, если вам надо суммировать числа, то зачем вы пробили Null константой? Ноль (0) не подойдет?
Ноль прекрасно суммируется не влияя при этом на сумму!!!

Ну и на крайний случай, есль функция nz() (в связке с Clng())
т.е.
Код: plaintext
1.
Select Sum(CLng(NZ(val,  0 )))
From [Ваш запрос с UNOIN]
...
Рейтинг: 0 / 0
Null - это строка?
    #32864347
ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ы
Гость
Не помню точно, но в Унионе акцесс может путать тип поля, если первая запись первого запроса содержит в этом поле null. Выход, соответственно: сделать так, чтобы там было число. Не помню, как. Надо потыкаться. М.б. сортировкой подзапроса, м.б. подзапросы местами поменять, м.б. сортировкой всего unionа. Пробовать надо.
...
Рейтинг: 0 / 0
Null - это строка?
    #32864508
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую конструкции вида

IIF(False,Cdbl(0),Null)

для получения Null-ов нужного типа при запросах на создание таблицы (SELECT INTO).
+В юнионах важен порядок подзапросов.
...
Рейтинг: 0 / 0
Null - это строка?
    #32865042
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paparome
Да, когда Null в таблице, то аксесс все правильно делает. А вот в Union зачем-то меняет тип. Первым блоком точно стоит запрос с цифрами (можно сравнить с приложенным ранее примером). Пример с суммой я указал только для того, чтобы проще показать сей негативный эффект.
К тому же раз в Access 2000 нет такой проблемы с null, значит это баг 97го.

Обсуждение этого вопроса подтолкнуло меня к некоему обходному решению, которое заключается в создании некой пустой таблицы со числовым столбцом и одной строкой содержащей Null. Подсовывая эту таблицу в запрос, можно вместо константы использовать имя поля, тогда аксесс не преобразовывает null в строку.
...
Рейтинг: 0 / 0
Null - это строка?
    #32865397
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assaИспользую конструкции вида

IIF(False,Cdbl(0),Null)

для получения Null-ов нужного типа при запросах на создание таблицы (SELECT INTO).
+В юнионах важен порядок подзапросов.
Прикольная фишка - надо запомнить
И что самое главное - работает :)
...
Рейтинг: 0 / 0
Null - это строка?
    #32865458
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CtrlAlt... проблема при использовании IIF(A=0,Null,A). Если А - число, столбец все равно станет строкой. Ладно бы я использовал "", а то ведь Null - он же в любом столбце может быть.

IIF(A<>0,A, Null)

уже много раз обсуждалось (тип принимается по части TRUE IIF-а, и если значения в части False лезут в этот тип - таким и остается).

Проверь в 97:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT * INTO TEST FROM [
SELECT tabl.Number, tabl.id
FROM tabl
UNION
SELECT IIF(False,CLng( 0 ),Null) ,IIF(False,CLng( 0 ),Null) 
FROM tabl]. q
;
меняя ф-ю с Clng(0) на CDbl(0) меняешь тип поля в создаваемой таблице.

или:
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT sum(q.Number) AS sumNumber, sum(q.id) AS SumId
FROM [SELECT tabl.Number, tabl.id
FROM tabl
UNION
SELECT IIF(False,CDbl( 0 ),Null) ,IIF(False,CLng( 0 ),Null) 
FROM tabl]. AS q;
- нормально работает (в отличии от обычных Null)
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Null - это строка?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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