Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 212
от 30.01.2007, 14:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 401, Экспертов: 56
В номере:Вопросов: 1, Ответов: 8


Вопрос № 72589: Здраствуйте. У меня два вопроса. 1. Как из поля типа text сделать выборку первых n символов ? 2. После выполнения запроса "SELECT * FROM table;" данные возрашаются в порядке их добавления, а как сделать что бы они шли в обратном пор...

Вопрос № 72.589
Здраствуйте. У меня два вопроса.
1. Как из поля типа text сделать выборку первых n символов ?
2. После выполнения запроса "SELECT * FROM table;" данные возрашаются в порядке их добавления, а как сделать что бы они шли в обратном порядке или "перевернуть"(в самом sql запросе) ?
Отправлен: 25.01.2007, 14:33
Вопрос задал: Драк Георгий (статус: 3-ий класс)
Всего ответов: 8
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Андрей / Magistr
Здравствуйте, Драк Георгий!

1) В SQL-запросе можно выбирать только значения полей. Чтобы выбрать n символов, нужно провести дополнительную обработку выбранных значений.
2) В SQL-запросе можно сделать только ORDER BY, чтобы отсортировать по значению столбца.

Возможно, в какой-то реализации SQL (конкретной СУБД) такие опции предусматриваются. Все зависит от Вашей СУБД.
Ответ отправил: Андрей / Magistr (статус: 3-ий класс)
Ответ отправлен: 25.01.2007, 15:09
Оценка за ответ: 3
Комментарий оценки:
1. Как показал следующий ответ - всё таки можно сделать выборку определённой части значения поля.
2. Спасибо, но в MySQL как-то всё-таки происходит вывод записей в порядке добавления при отсутствии в запросе параметра сортировки и полей с индексом в самой таблице.

Отвечает: Евгений Крюков
Здравствуйте, Драк Георгий!
1. Вам поможет функция SUBSTR(имя столбца, с какого символа начинаем, сколько берем)
Пример использования в приложении.
2 Сортировка вызывается конструкцией ORDER BY столбец(или группа столбцов) ASC|DESC (по возрастанию|по убыванию)
Например,
SELECT EMPNO, ENAME FROM EMP ORDER BY EMPNO - сортировать столбец EMPNO по возрастанию (ASC можно не указывать)
SELECT EMPNO, ENAME FROM EMP ORDER BY EMPNO DESC - сортировать столбец EMPNO по убыванию.
SELECT EMPNO, ENAME FROM EMP ORDER BY EMPNO ,ENAME- сортировать сначала столбец EMPNO, в случае одинаковых значений сортировать по столбцу ENAME

Также, во многих базах вместо указания названия столбца можно использовать его номер в запросе, например последний запрос можно переписать так:
SELECT EMPNO, ENAME FROM EMP ORDER BY 1,2

Приложение:

---------
Большинство ответов на вопросы в рассылках находится через Яндекс за 1 мин.

Ответ отправил: Евгений Крюков (статус: Практикант)
Ответ отправлен: 25.01.2007, 15:30
Оценка за ответ: 5
Комментарий оценки:
1. Большое спасибо.
2. MySQL выводит значения из таблицы именно в порядке их добавления. Никаких полей с индексами. Все поля текстовые. Выводит ни по алфавиту, ни по размеру, а именно в порядке добавления.

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Драк Георгий!
Может немного не такой будет ответ, но для MS SQL работает так:
1. В самом запросе можно обрабатывать строковые поля при помощи функций Left, Right, Len, Ltrim, Rtrim, Trim, Substring и другие. Эти функции встроены в язык T-SQL.
Для Вас подойдет запрос " Select Left ( Name , 5 ) as Small_Name From table".
2. На самом деле последовательность записей в Вашем запросе могла быть и другой. Записи в запросе не отсортированы, поэтому они отображаются по мере их добавления. Для возможности использования сортировок в запросах желательно наличие ключевых полей, будь то дата создания записи, номер документа, код записи и т.п.
Тогда Ваш запрос можно было бы продолжить примерно так :
"... Order by Data_Doc, Nom_Doc"
Второе условие сортировки необходимо для сортировки внутри даты.
При наличии таких полей возможен отбор записей по условию, например:
"... Where Data_Doc>cdate ( '25.06.2006' ) and Data_Doc<cdate ( '30.06.2006' ) Order by Data_Doc, Nom_Doc"
В некоторых СУБД имеется специальный тип поля - счетчик, который однозначно идентифицирует запись и автоматически присваивается при добавлении новой записи.
Если в Вашей базе в добавляемой записи нет такого поля, которое бы как-то отличало эту запись от существующих ( т.е. у каждой последующей записи значение поля больше ( или меньше ) , чем у всех предыдущих ) , то отсортировать в порядке их добавления или убывания будет невозможно.
Т.е. если в Вашей базе имеется поле типа ДАТА, и у нескольких записей значение этого поля совпадает, то после сортировки по полю внутри группы записей с одинаковым значением порядок расположения может быть разным в различные моменты времени запроса.
Сортировка может быть не только по полю, а и по результатам вычислений, например:
"... Order by Day (Data_Doc ) , Month (Data_Doc ) , Year (Data_Doc ) , Nom_Doc"
Записи выведутся группами по дням, внутри одного дня отсортированы по месяцам, а внутри месяца по годом.
Т.е. получится список 1.5.03 , 1.6.03 , 1.6.04 , 2.4.02 , 2.6.03 и т.д.
С уважением.
Ответ отправил: Филатов Евгений Геннадьевич (статус: 6-ой класс)
Ответ отправлен: 25.01.2007, 15:58

Отвечает: Volhit
Здравствуйте, Драк Георгий!
1. Функция left в MS SQL есть ("select left(field_name, 5) from table_name" вернет первые пять символов
2. Пользуйтесь сортировкой (конструкция "order by <FIELD_NAME> desc" отсортирует поле по убыванию)- например: "select name, last_name, age from clients order by name desc")
Ответ отправил: Volhit (статус: 2-ой класс)
Ответ отправлен: 25.01.2007, 17:01

Отвечает: Grigory
Здравствуйте, Драк Георгий!
Согласну Help от MS SQL Server 2000, для этого используется следующая функция:

SUBSTRING
Returns part of a character, binary, text, or image expression. For more information about the valid Microsoft® SQL Server™ data types that can be used with this function, see Data Types.

Syntax
SUBSTRING ( expression , start , length )

Arguments
expression

Is a character string, binary string, text, image, a column, or an expression that includes a column. Do not use expressions that include aggregate functions.

start

Is an integer that specifies where the substring begins.

length

Is an integer that specifies the length of the substring (the number of characters or bytes to return).

Note Because start and length specify the number of bytes when SUBSTRING is used on text data, DBCS data, such as Kanji, may result in split characters at the beginning or end of the result. This behavior is consistent with the way in which READTEXT handles DBCS. However, because of the occasional strange result, it is advisable to use ntext instead of text for DBCS characters.

Return Types
Returns character data if expression is one of the supported character data types. Returns binary data if expression is one of the supported binary data types.

The returned string is the same type as the given expression with the exceptions shown in the table.

Given expression Return type
text varchar
image varbinary
ntext nvarchar

Remarks
Offsets (start and length) using the ntext, char, or varchar data types must be specified in number of characters. Offsets using the text, image, binary, or varbinary data types must be specified in number of bytes.

Note Compatibility levels can affect return values. For more information about compatibility levels, see sp_dbcmptlevel.

Use SUBSTRING with text, ntext, and image data
This example shows how to return the first 200 characters from each of a text and image data column in the publishers table of the pubs database. text data is returned as varchar, and image data is returned as varbinary.

USE pubs
SELECT pub_id, SUBSTRING(logo, 1, 10) AS logo,
SUBSTRING(pr_info, 1, 10) AS pr_info
FROM pub_info
WHERE pub_id = '1756'

Here is the result set:

pub_id logo pr_info
------ ---------------------- ----------
1756 0x474946383961E3002500 This is sa

(1 row(s) affected)

This example shows the effect of SUBSTRING on both text and ntext data. First, this example creates a new table in the pubs database named npr_info. Second, the example creates the pr_info column in the npr_info table from the first 80 characters of the pub_info.pr_info column and adds an ü as the first character. Lastly, an INNER JOIN retrieves all publisher identification numbers and the SUBSTRING of both the text and ntext publisher information columns.

Удачи!
---------
Если хочешь быть счастливым - будь им! (Козьма Прутков)
Ответ отправил: Grigory (статус: Студент)
Ответ отправлен: 25.01.2007, 17:26

Отвечает: Архангельский Андрей Германович
Здравствуйте, Драк Георгий!

Select * from Table order by Field Asc (если в порядке возрастания по этому полю)
Select * from Table order by Field Desc (если в порядке убывания по этому полю)

Вместо имени поля можно поставить номер поля по порядку перечисления в запросе

Select Fild1, Cnt(Fld2), Fld3 from Table
group by Fld2
order by 2


---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 25.01.2007, 17:33

Отвечает: Argyn.Durmagambetov
Здравствуйте, Драк Георгий!
1) что вы понимаете под типом text ?
2) для определения порядка записей результата запроса используется директива ORDER BY имя_поля
то есть ваш запрос быдет выглядеть так "SELECT * FROM table ORDER BY field_name" где field_name - имя поля по которому будет произведена сортировка
полей сортировки можно указать несколько через запятую
можно указать так же вид сортировки по возрастанию (используется по умолчанию) и по убыванию
пример запроса с сортировки по возрастанию "SELECT * FROM table ORDER BY field_name ASC"
пример запроса с сортировки по убыванию "SELECT * FROM table ORDER BY field_name DESC"
---------
Не говори мне СДЕЛАЙ и я не скажу куда тебе идти...спроси "Как сделать" и получишь ответ
Ответ отправил: Argyn.Durmagambetov (статус: 1-ый класс)
Ответ отправлен: 26.01.2007, 06:28

Отвечает: Vvvv
Здравствуйте, Драк Георгий!
1) SUBSTRING ('Строка',стартовая позиция,количество символов)
2) Order By ColumnName ASC/DESC
ASC - сортировка по возрастанию (по умолчанию, можно неуказывать)
DESC - сортировка по убыванию

Select tableID, Substring (FullName, 1,2)
From Table
Order by tableID DESC, FullName ASC
Ответ отправил: Vvvv (статус: 1-ый класс)
Ответ отправлен: 26.01.2007, 15:20


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.43 beta от 26.01.2007
Яндекс Rambler's Top100

В избранное