Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Открыть новую тему     Написать ответ в эту тему

landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
deyatel1974, да, например, для oracle через аналитические функции это будет выглядеть примерно так.

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 12:32 10-03-2015
exteris

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Либо подзапросом.

Всего записей: 382 | Зарегистр. 14-04-2003 | Отправлено: 14:17 10-03-2015
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, можно и подзапросом, но будет работать существенно медленнее. Аналитика сейчас входит в стандарт SQL и поддерживается во многих БД, в частности, в Oracle,  MS SQL, PostgreSQL.  
 
deyatel1974, у тебя какая БД?

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 09:47 11-03-2015
deyatel1974

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
у меня именно оракл сейчас читаю про аналитику, спасибо. пока непотяно что такое rank, dense_rank?

Всего записей: 23 | Зарегистр. 10-08-2014 | Отправлено: 11:58 12-03-2015
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
deyatel1974, вот краткое описание этих функций. Смысл в том, что они нумеруют элементы внутри групп, при этом rank одинаковым значениям элементов сопоставляет одинаковые номера, увеличивая счетчик только на отличающихся элементах, а dense_rank нумерует по-порядку.

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 12:39 12-03-2015
VadKomarov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте.
Нужна ваша помощь.
есть некая таблица на сервере с oracle.
 
вот код по которому информацию выдало
select *
from таблица where имя_поля between '01.04.2015' and '02.04.2015'
 
а вот код по которому информации якобы ни какой
select *
from таблица where имя_поля between '25.03.2015' and '02.04.2015'
 
 
начинаю разбираться и понимаю что "имя_поля" в таблице идёт как текстовое  
 
переписываю так
select to_date(имя_поля)
from таблица where to_date(имя_поля) between 'начальная дата' and 'конечная дата'
 
запускаю и выдает ошибку что поле должно быть численным в пределах...
тогда ограничиваю диапазон и результат есть...
 
подскажите как написать запрос что бы была проверка на ошибки и если в строке встретилась ошибка to_date(имя_поля)=ОШИБКА ТО NULL и продолжить выборку
 
пример записей в таблице
ФАМИЛИЯ   ИМЯ   ОТЧЕСТВО   дата(текстовое поле)    
Иванов   Иван   Иванович   11.11.1981    
Иванов   Петр   Петрович   1.1.1981    
Сергеев   Иван   Иванович   11.11.81    
Петров   Иван   Иванович      
Иванов   Иван   Иванович   22.1.1981    
Иванов   Иван   Иванович   др  

 
должно выдать

  1. Иванов Иван Иванович 11.11.1981
  2. Иванов Петр Петрович 01.01.1981
  3. Иванов Иван Иванович 22.01.1981

 
Спасибо заранее

Всего записей: 100 | Зарегистр. 01-05-2005 | Отправлено: 08:08 05-04-2015
nyinick



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VadKomarov, добавьте подзапрос к Вашему запросу, Который будет отсеивать null-овые поля даты
select to_date(имя_поля)  
 from  
(select * from таблица where имя_поля is not null)
 where to_date(имя_поля) between 'начальная дата' and 'конечная дата'

Всего записей: 249 | Зарегистр. 26-06-2006 | Отправлено: 15:18 05-04-2015
VadKomarov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
nyinick
Спасибо учту, но вот ещё есть вопрос а если поле не пустое а с текстом? как быть ?
Я пишу на Delphi и по аналогии бы функцию типа TRY ... EXCEPT есть ли такая возможность ?

Всего записей: 100 | Зарегистр. 01-05-2005 | Отправлено: 18:03 05-04-2015
nyinick



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VadKomarov, вариант сделать много есть, но как один из:
Создаёшь в оракле свою функцию
 
FUNCTION convert_date (input_string_date IN VARCHAR2) RETURN DATE  
IS
   return_value DATE := NULL;
BEGIN
    return_value := TO_DATE (input_string_date);
EXCEPTION
   WHEN OTHERS THEN return_value := NULL;
END;
 
а потом селектишь данные из таблицы вызывая эту функцию и передавая ей имя_поля
 
select *, converted_date as имя_поля from  
 (select *, convert_date(имя_поля) as converted_date from таблица where converted_date is not null)  
  where to_date(имя_поля) between 'начальная дата' and 'конечная дата'
 
Возможны оошибки в синтаксисе, т.к. Оракла под рукой нет что бы проверить, но решение рабочее

Всего записей: 249 | Зарегистр. 26-06-2006 | Отправлено: 19:04 05-04-2015
KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VadKomarov,

Цитата:
Спасибо учту, но вот ещё есть вопрос а если поле не пустое а с текстом? как быть ?  
Я пишу на Delphi и по аналогии бы функцию типа TRY ... EXCEPT есть ли такая возможность ?

В PL-SQL есть обработка Exceptions
https://docs.oracle.com/cd/A97630_01/appdev.920/a96624/07_errs.htm

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 06:48 06-04-2015
VadKomarov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем огромное спасибо ваши подсказки помогли !!!

Всего записей: 100 | Зарегистр. 01-05-2005 | Отправлено: 18:06 06-04-2015
Unnicked

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как можно написать запрос для следующей задачи (для Oracle).
 
SELECT ID,S,A,B,C FROM T
 
возвращает значения вида:
 

Код:
ID   S   A   B   C
1    2   3   4   5
6    7   8   9   10

 
требуемый результат:
 
ID S
1 2
A 3
B 4
C 5
6 7
A 8
B 9
C 10
 
 
MrZeRo, спасибо!

Всего записей: 1127 | Зарегистр. 19-08-2005 | Отправлено: 09:51 15-04-2015 | Исправлено: Unnicked, 12:20 19-05-2015
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 
SELECT  
  DECODE(n.rn, 1, TO_CHAR(id), 2, 'A', 3, 'B', 4, 'C') AS id,
  DECODE (n.rn, 1, t.s, 2, t.a, 3, t.b, 4, t.c) AS s
FROM t,
(
  SELECT
    level as rn
  FROM dual
  CONNECT BY level < 5
) n    
ORDER BY 2
 


----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 14:57 17-04-2015
post4



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем привет!
 
Есть БД , в ней столбец file_data с содержимым вида 0x78DAED7многоРазныхСимволов.
 
Знаю, что это doc файлы, другой инфы нет.
Как их слить с помощью PHP?
 
делаю так
 

Код:
 
$query = "SELECT file_data FROM table WHERE id_document = 20";
$result = sqlsrv_query( $conn, $query );
 
list($id, $id_document, $file_name, $file_data) = sqlsrv_fetch_array($result);
 
header("Content-Disposition: attachment; filename=$file_name");
   
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");  
//echo base64_encode($file_data);
echo ($file_data);
 

 
файл скачивается и имеет размер, похожий на правду, но в содержимом иероглифы, либо наборы символов
 

Код:
fQkglF33+B0z9n3fl1AkZM1uLKFIQtEi


Код:
xЪн}     ”]чш 3ц}Я—P$dНn,ЎHBС" e§И–-ЩЉJZ( ERIRТЫfR

Всего записей: 58 | Зарегистр. 07-02-2009 | Отправлено: 16:05 21-10-2015
z0o



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это не DOC файлы, header не тот. Нужно знать как их вкладывают в БД, какое преобразование делают, и делать обратное преобразование.

Всего записей: 25 | Зарегистр. 15-10-2011 | Отправлено: 10:54 22-10-2015
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Зависит от типа DB наверное, например в SQL Server это обычно тип данных varbinary(max) {к которому иногда применяется немного криптографии по какому-нибудь ключу для защиты данных},
наименования (и виртуальные пути) файлов часто стоят в отдельных столбцах той-же (или другой) таблицы
если без криптографии то на VB можно реализовать например как описано здесь

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 12:52 22-10-2015
post4



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
z0o
 
код на PHP мой, и хэдеры задавал я, msword тоже пробовал - все тоже самое.
файлы точно DOC Типа.
Методом тыка выяснил, что возможно, в таблице хранятся HEX значения
 
Добавлено:
В свойствах таблицы прописано Data Type Image

Всего записей: 58 | Зарегистр. 07-02-2009 | Отправлено: 14:49 22-10-2015
LoneWolfII



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте уважаемые!
 
 Не знаю сюда обращаться или нет, пишу программу на Delphi и назрело пару вопросов:
 
1) Как узнать какая версия MS SQL установлена в системе, чтобы вывести в Label.Caption ?
2) Как из программы произвести упаковку конкретной базы?

Всего записей: 541 | Зарегистр. 03-10-2001 | Отправлено: 10:01 14-11-2015
Alexzzy

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LoneWolfII
1. В системе может быть установлено несколько версий! Подключаешься к MS SQL и далее select @@version
2. Упаковка это shrink? Подключаешься к MS SQL и далее DBCC SHRINKDATABASE database_name

Всего записей: 1474 | Зарегистр. 10-07-2013 | Отправлено: 03:29 15-11-2015
LoneWolfII



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alexzzy
 Я думал в Delphi можно что-то вроде этого сделать:
osql -S localhost\sqlexpress -i C:\Backs\TEST_BAK.sql -o C:\temp\TEST_log_sql.log -E
 
 Где osql.exe прога из состава MS SQL. Запуск пока осуществляю через ShellExecute
 
А вот содержимое TEST_BAK.sql
 

Цитата:
declare @path as varchar(200)
set @path = N'C:\Backs\TEST_BAK.bak'
BACKUP DATABASE [TEST_DB] TO DISK = @path  
WITH NOFORMAT, INIT,  NAME = N'TEST_DB',  
SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO
 

 
 Все указанное выше конечно работает и без необходимости подключаться к базе. Вот такой реализации и хотелось бы получить непосредственно средствами/компонентами Delphi.

Всего записей: 541 | Зарегистр. 03-10-2001 | Отправлено: 10:13 16-11-2015 | Исправлено: LoneWolfII, 10:14 16-11-2015
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru