Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какая функция в SQL конвертирует Null в ноль? 
:(
    Опции темы
Неопытный
Дата 1.12.2006, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



Какая функция в SQL конвертирует Null в ноль, В акцес функция Nz, В Delphi она не срабатывает
PM MAIL   Вверх
Akella
Дата 1.12.2006, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



в каком именно SQL?

Добавлено @ 09:30 
можно так
Код

if f = null then f = 0

PM MAIL   Вверх
Неопытный
Дата 1.12.2006, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



Использую Ado при подключении к Аксесу,
 В компоненте AdoQuery в Sql запрос типа 

'select ... nz(Table1.Pole1) as q ...' 
На nz - пишет неизвесная функция

PM MAIL   Вверх
PROeXT
Дата 1.12.2006, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2005
Где: Москва

Репутация: нет
Всего: нет



Можно и средствами самой Delphi обойтись... Например, после открытия запроса:

Код

IF VarIsNull(ADOQuery.FieldByName('q').Value) Then
Begin
 //Получили в результате запроса NUll
End {IF}
Else
 Begin
  {А тут не Null}
 End; {Else}

PM MAIL ICQ   Вверх
ТоляМБА
Дата 1.12.2006, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



Код

SELECT Table10.one, Table10.two
FROM Table10
where Table10.two is not null
union
select  Table10.one, 0
from table10
where Table10.two is null ;

PM   Вверх
Неопытный
Дата 1.12.2006, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



Цитата(ТоляМБА @ 1.12.2006,  10:54)
Код

SELECT Table10.one, Table10.two
FROM Table10
where Table10.two is not null
union
select  Table10.one, 0
from table10
where Table10.two is null ;

У вас IsNull в условии where Table10.two is not null
Мне нужно порсто конвертировать Null В 0 в вычислимом поле

...A+Null as B... дает Null

PM MAIL   Вверх
Vas
Дата 1.12.2006, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Неопытный, скажи что за БД. В них разные функции в оракле например nvl(Field, 0) вместо 0 поставить можно любое число.

Цитата(Неопытный @  1.12.2006,  11:28 Найти цитируемый пост)
Мне нужно порсто конвертировать Null В 0 в вычислимом поле

Интересно, а может просто все числа которые участвуют в вычисляемом поле просто в запросе конвертировать в 0 и тады 0+0=0 будет в вычисляемом поле 0 или что ты там еще хочешь.



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Неопытный
Дата 1.12.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



Я же говорю б.д. Access, nz - не работает

Добавлено @ 12:58 
Цитата

Интересно, а может просто все числа которые участвуют в вычисляемом поле просто в запросе конвертировать в 0 и тады 0+0=0 будет в вычисляемом поле 0 или что ты там еще хочешь.

Так их физически нет!
В запросе присутствует декартово произведение.
Связь A--->B
В результате нек информация берется из таблы A, а чиловая из таблы B,
Если то что есть в A тсутствует в B, в результирующем запросе ест-но вместо числа из B будет
Null. Так вот нужно просто это Null заменить на 0. Нужна функция. Nz - не работает.
Я знаю, что можно Where not is Null ... , но тогда запись не попадет в выборку, а запись все равно нужна. 

PM MAIL   Вверх
Vas
Дата 1.12.2006, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Используй IIF, вот пример, проверял в Ацессе 2003 работает.
Код

SELECT iif(IsNull([id]),0,[id]), name
FROM mytable;



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Неопытный
Дата 1.12.2006, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



Получилось вроде 
...+Iif(IsNull(x)=0,x,0) as w ...
До этого пробовал 
...+Iif(IsNull(x)=0;x;0) as w ...
Ругается на синтаксис хотя в Аксе 
...+Iif(IsNull(x)=0;x;0) as w ...
странно...

Добавлено @ 13:14 
Цитата(Vas @ 1.12.2006,  13:09)
Используй IIF, вот пример, проверял в Ацессе 2003 работает.
Код

SELECT iif(IsNull([id]),0,[id]), name
FROM mytable;

Блин столько времени потярял из-за ;
Сразу ведь так и делал, но ставил ,
И всетаки почему Nz не работает.

Это сообщение отредактировал(а) Неопытный - 1.12.2006, 13:16
PM MAIL   Вверх
Vas
Дата 1.12.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(Неопытный @  1.12.2006,  13:12 Найти цитируемый пост)
И всетаки почему Nz не работает.

У Билла Гейтса спроси  smile 


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Неопытный
Дата 1.12.2006, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



Цитата(Vas @ 1.12.2006,  13:21)
Цитата(Неопытный @  1.12.2006,  13:12 Найти цитируемый пост)
И всетаки почему Nz не работает.

У Билла Гейтса спроси  smile

А как с ним связаться, есть телефончик...
PM MAIL   Вверх
comtat
Дата 1.12.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 1
Всего: 71



есть такая функция как isnull(Где определяем, на че меням)


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
sonyi
Дата 16.3.2009, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



Но при использовании ISNull() выдает ошибку "Capability not supported". Как сделать, чтоб встроеные функции SQL работали в Query?

Это сообщение отредактировал(а) sonyi - 16.3.2009, 20:45
PM MAIL   Вверх
former
Дата 16.3.2009, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(sonyi @  16.3.2009,  20:41 Найти цитируемый пост)
ISNull() выдает ошибку "Capability not supported"

И не будет работать, поскольку эта функция возвращает наличие данных в поле.
Нужно:
Код

if ADOQuery1.FieldByName('abc').IsNull=true then


Добавлено @ 20:49
Цитата(sonyi @  16.3.2009,  20:41 Найти цитируемый пост)
Как сделать, чтоб встроеные функции SQL работали в Query?

Что ты хочешь получить в итоге?

Это сообщение отредактировал(а) former - 16.3.2009, 20:51


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
sonyi
Дата 16.3.2009, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



А как тогда быть если в селекте хочу просумировать суму нескольких полей < Sum(Sum(A1)+Sum(A2)+Sum(A3)) >, а одна из A=0 то результат тоже 0?
PM MAIL   Вверх
former
Дата 16.3.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(sonyi @  16.3.2009,  20:57 Найти цитируемый пост)
А как тогда быть если в селекте хочу просумировать суму нескольких полей < Sum(Sum(A1)+Sum(A2)+Sum(A3)) >, а одна из A=0 то результат тоже 0? 

Почему ноль? Это же  сумма!  1+0=1 smile 


Это сообщение отредактировал(а) former - 16.3.2009, 21:00


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
sonyi
Дата 16.3.2009, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



Это правда. Но если при сумме поля А1 имеется хоть один ноль то вся сумма будет 0 (вроде)
PM MAIL   Вверх
former
Дата 16.3.2009, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



sonyi, Null - это не ноль, а метка о том, что данные в ячейке отсутствуют. При суммировании они просто прибавляться не будут, т.е. фактически будут возвращать ноль (с точки зрения математики).

Добавлено через 2 минуты и 14 секунд
Цитата(sonyi @  16.3.2009,  20:57 Найти цитируемый пост)
Sum(Sum(A1)+Sum(A2)+Sum(A3)) >, а одна из A=0 то результат тоже 0? 

А - это что, поле?
Цитата(sonyi @  16.3.2009,  21:04 Найти цитируемый пост)
Но если при сумме поля А1 имеется хоть один ноль то вся сумма будет 0 (вроде) 

Это только в том случае, если все строки в А - Null или значения в них равны нулю


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
sonyi
Дата 16.3.2009, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



select Data, A1+A2+A3+A4 as suma
from aa
where Data BETWEEN "01.02.2009" AND "28.02.2009"
//---------------------------

A1..A4 numeric
Если хоть один из А1..А4 пустой(Null) то поле suma пустая. Вот токое у меня

Добавлено @ 21:21
В SQL-ле работает функция ISNULL(A1,0) а в Делфи нет.

Это сообщение отредактировал(а) sonyi - 16.3.2009, 22:47
PM MAIL   Вверх
Kbl4AH
Дата 16.3.2009, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(sonyi @  16.3.2009,  21:20 Найти цитируемый пост)
В SQL-ле работает функция ISNULL(A1,0) а в Делфи нет.

сильно сказано! я бы сказал, что она работает в Transact-SQL...
Т.к., например, в PL/SQL другая функция - nvl(field, value)

Это сообщение отредактировал(а) Kbl4AH - 16.3.2009, 23:46
PM MAIL ICQ   Вверх
sonyi
Дата 13.4.2009, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



А какой язык SQL используется в TQuery подключенной к таблице Paradox? Потому что некоторые встроеные функции SQL не работают.
PM MAIL   Вверх
Akella
Дата 13.4.2009, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



SQL92?

Добавлено через 1 минуту и 52 секунды
Только что заглянул в справку по BDE
Цитата

For more specific information about the BDE implementation of the SQL-92 specification


Добавлено через 2 минуты и 20 секунд
Цитата

What is local SQL?

Local SQL is the subset of the SQL-92 specification used to access dBASE, Paradox, and FoxPro tables. On receving local SQL statements from front-end applications, the Borland Database Engine (BDE) translates the statements into BDE API functions.

The local SQL language set

The SQL statements fall into two categories: Data Manipulation Language (DML) and Data Definition Language (DDL).

DML consists of SQL statements used for retrieving, inserting, updating, and deleting table data. SELECT is a DML statement.

DDL consists of SQL statements used for creating, altering, and deleting tables, and for creating and deleting indexes. CREATE TABLE and DROP INDEX are DDL statements.

For a complete introduction to ANSI-standard SQL, see one of the many available third-party books. 



Добавлено через 3 минуты и 13 секунд
Цитата(sonyi @  13.4.2009,  20:21 Найти цитируемый пост)
Потому что некоторые встроеные функции SQL не работают. 

Какие именно, религия не позволяет написать? Мало того, встроенные куда?

Это сообщение отредактировал(а) Akella - 13.4.2009, 21:18
PM MAIL   Вверх
sonyi
Дата 13.4.2009, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



Цитата(Akella @ 13.4.2009,  19:18)

Какие именно, религия не позволяет написать? Мало того, встроенные куда?

Ну например ISNULL().

PM MAIL   Вверх
Kbl4AH
Дата 13.4.2009, 22:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(sonyi @  13.4.2009,  22:48 Найти цитируемый пост)
Ну например ISNULL().

Хм, интересный ты... А почему это в парадоксе должна работать функция из sql сервера (язык Transact-SQL, как я уже говорил выше)???

ЗЫ. Частенько для функций одного языка есть анлогичные функции для других языков...
Цитата

COALESCE (V1, V2) эквивалентно следующему: CASEWHENV1 ISNOTNULLTHENV1 ELSEV2 END. 
COALESCE (V1, V2, . . . ,n) для n >= 3 эквивалентно CASEWHENV1 ISNOTNULLTHENV1 ELSECOALESCE (V2, . . . ,n) END.
© Язык баз данных SQL/92

PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1438 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.