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

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

  Все выпуски  

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


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

Лучшие эксперты в разделе

solowey
Статус: Бакалавр
Рейтинг: 329
∙ повысить рейтинг »
Megaloman
Статус: Советник
Рейтинг: 77
∙ повысить рейтинг »
Alexander Babich
Статус: Профессор
Рейтинг: 0
∙ повысить рейтинг »

∙ Базы данных

Номер выпуска:540
Дата выхода:08.11.2019, 20:45
Администратор рассылки:Коцюрбенко Алексей Владимирович (Модератор)
Подписчиков / экспертов:21 / 16
Вопросов / ответов:3 / 12

Консультация # 66544: Добрый вечер, уважаемые эксперты. Проблема в следующем (MS SQL): Есть две не связанные таблицы. 1-я: ModelId, Model (varchar(7)), в которую внесены краткие названия моделей приборов "...8150, 8160, 8160-1 и т.д...". 2-я таблица имеет, среди прочих, два столбца "Customer_Order" и "Quantity". Причем в "Custo...
Консультация # 73272: Доброго времени суток. У меня возникла проблема, в БД на MS SQL Server 2000 есть поле с типом float. Если я, например, в него добавляю значение 3233.20, то при выборке из этой таблицы это поле может стать равным 3233.199999(9)..причем не всегда такое происходит, и как это разрешить я не знаю. Округлять возможности нет, поэтому прошу вашего сове...
Консультация # 60162: Добрый день. Можно ли как-то проверить есть ли в базе данных таблица с определённым именем? Нужно создать таблицу в БД, но только в том случае, если такой таблицы ещё нет....

Консультация # 66544:

Добрый вечер, уважаемые эксперты.
Проблема в следующем (MS SQL):
Есть две не связанные таблицы. 1-я: ModelId, Model (varchar(7)), в которую внесены краткие названия моделей приборов "...8150, 8160, 8160-1 и т.д...". 2-я таблица имеет, среди прочих, два столбца "Customer_Order" и "Quantity". Причем в "Customer_Order" указывается полное наименование прибора, в которое включено название модели - "ххх-хх-8160-хххххх". Количество "Х" - не определено."Quantity" - количество приборов в заказе. Подскажите, как сформировать запрос на получение суммы каждой модели таблицы Model, имеющих совпадения с частью строки таблицы "Customer_Order".
Оператор LIKE здесь не работает, так как принимает подзапрос как строку.

Дата отправки: 11.12.2006, 17:12
Вопрос задал: DmitryDE
Всего ответов: 3
Страница онлайн-консультации »


Консультирует PaVeL_Ekt:

Здравствуйте, DmitryDE!

попробуйте like (\'%8160%\')

Консультировал: PaVeL_Ekt
Дата отправки: 11.12.2006, 17:23
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Grigory:

Здравствуйте, DmitryDE!
В MS SQL Server\'е есть функция SUBSTRING. Вот синтакс:
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).

Для определения начальной позиции используйте функйию PATINDEX:
PATINDEX
Returns the starting position of the first occurrence of a pattern in a specified expression, or zeros if the pattern is not found, on all valid text and character data types.

Syntax
PATINDEX ( \'%pattern%\' , expression )

Arguments
pattern

Is a literal string. Wildcard characters can be used; however, the % character must precede and follow pattern (except when searching for first or last characters). pattern is an expression of the short character data type category.

expression

Is an expression, usually a column that is searched for the specified pattern. expression is of the character string data type category.

Return Types
int

Remarks
PATINDEX is useful with text data types; it can be used in a WHERE clause in addition to IS NULL, IS NOT NULL, and LIKE (the only other comparisons that are valid on text in a WHERE clause).

If either pattern or expression is NULL, PATINDEX returns NULL when the database compatibility level is 70. If the database compatibility level is 65 or earlier, PATINDEX returns NULL only when both pattern and expression are NULL.

Examples
A. Use a pattern with PATINDEX
This example finds the position at which the pattern "wonderful" begins in a specific row of the notes column in the titles table.

USE pubs
GO
SELECT PATINDEX(\'%wonderful%\', notes)
FROM titles
WHERE title_id = \'TC3218\'

Консультировал: Grigory
Дата отправки: 11.12.2006, 18:17
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Синельников Сергей:

Здравствуйте, DmitryDE!

Что-то вот похожее на это:

SELECT Model, SUM(Quantity) FROM T1 LEFT OUTER JOIN T2 ON (PATINDEX(Model,Customer_Order)>0) GROUP BY Model

К сожалению в MS SQL не силен, поэтому в возможны неточности в синтаксисе запроса, но смысл такой.

Консультировал: Синельников Сергей
Дата отправки: 12.12.2006, 07:06
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 73272:

Доброго времени суток.
У меня возникла проблема, в БД на MS SQL Server 2000 есть поле с типом float. Если я, например, в него добавляю значение 3233.20, то при выборке из этой таблицы это поле может стать равным 3233.199999(9)..причем не всегда такое происходит, и как это разрешить я не знаю. Округлять возможности нет, поэтому прошу вашего совета
Заранее благодарен

Дата отправки: 30.01.2007, 13:43
Вопрос задал: Mefisto
Всего ответов: 3
Страница онлайн-консультации »


Консультирует Базанов Иван Александрович:

Здравствуйте, Mefisto!
Используйте тип данных numeric или decimal, установив параметр scale в 2

Консультировал: Базанов Иван Александрович
Дата отправки: 30.01.2007, 14:04
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Архангельский Андрей Германови:

Здравствуйте, Mefisto!

В Firebird эту проблему решили просто Double Float хранится физически как Integer64
И при указании Number(18.4) получаем число с плавающей запятой с четыремя знаками (или сколько надо) после запятой всегда

Консультировал: Архангельский Андрей Германови
Дата отправки: 30.01.2007, 15:29
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Grigory:

Здравствуйте, Mefisto!
Вот, что пишет SQL Server 2000 Help про float datatype:
Approximate number data types for use with floating point numeric data. Floating point data is approximate; not all values in the data type range can be precisely represented.
Поэтому, если Вы хотите получать неприблизительные значения, лучше будет использовать Decimal. Если все, что вам нужно - это 2 знака после запятой, то надо указать значение scale=2 при создании таблицы (design). Надеюсь, Вам эта информация поможет разобраться.

Удачи!

Григорий

Консультировал: Grigory
Дата отправки: 30.01.2007, 17:07
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 60162:

Добрый день.
Можно ли как-то проверить есть ли в базе данных таблица с определённым именем?
Нужно создать таблицу в БД, но только в том случае, если такой таблицы ещё нет.

Дата отправки: 25.10.2006, 19:39
Вопрос задал: Вiктор
Всего ответов: 6
Страница онлайн-консультации »


Консультирует Евгений Крюков:

Здравствуйте, Вiктор!
Подход зависит от базы данных. Например, для Oracle можно обратиться к справочнику таблиц USER_TABLES или обработать ошибку ORA-942. В MySQL попытка обращения к несуществующей таблице вызовет исключение 1146 - его также можно обработать и создать нужную таблицу.

Консультировал: Евгений Крюков
Дата отправки: 25.10.2006, 20:00
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Филатов Евгений Геннадьевич:

Здравствуйте, Вiктор!

В приложении пример из рабочей программы. Связь с базой через DAO. Вместо QueryDefs ( коллекция запросов ) нужно поставить TableDefs (коллекция таблиц ) и метод CreateQueryDef заменить на CreateTableDef с соответствующими параметрами.
Если нет вопросов по созданию таблицы, то все.

С уважением.

Приложение:

Консультировал: Филатов Евгений Геннадьевич
Дата отправки: 25.10.2006, 20:01
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Архангельский Андрей Германови:

Здравствуйте, Вiктор!

Все зависит от типа СУБД.
Как правило есть системные таблицы описывающие архитектуру БД, соответственно есть таблица, которая содержит перечень таблиц и их полей.
К этим таблицам можно сделать запрос.
В Firebird эта таблица называется rdb$relations, а в ней поле rdb$relations_name в котором имена таблиц

Консультировал: Архангельский Андрей Германови
Дата отправки: 25.10.2006, 20:35
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Grigory:

Здравствуйте, Вiктор!
Если вы имеете дело с SQL Server 2000, то это можно проверить с помощью вот такого запроса:
SELECT count(*)
FROM sysobjects
WHERE (name = \'имя вашей таблицы\')
Этот запрос вернет 1 если такая таблица уже в вашей БД есть, и 0 - если такой таблицы нет.
В Oracle это делается вот так:
входите в SQL Plus в качестве пользователя с правами доступа к этой таблице и вводите:
select count(*) from cat where table_name = \'имя вашей таблицы\';

Удачи!

Консультировал: Grigory
Дата отправки: 25.10.2006, 20:49
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Марк Крейн:

Здравствуйте, Вiктор!
Как всегда соригинальничаю. Хотя то что я сейчас скажу, несмотря на свою дикость, работает. Проверялось только на MySQL. Итак, код:

SELECT * from table where (1=0)

Если выполнится без проблем, значит таблица table существует, в противном случае её нет. Я сам когда прочитал об этом в интернете был поражён (как может 1 равняться нулю??). Но тем не менее факт остаётся фактом - всё прекрасно работает.

Консультировал: Марк Крейн
Дата отправки: 25.10.2006, 21:03
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует HookEst:

Здравствуйте, Вiктор!
Мне отвечать проще, я знаю вашу СУБД...
В MySQL 3.23 и выше, Вы можете использовать IF NOT EXISTS так, что если таблица с таким именем уже существует - ошибки не возникнет(структура имеющейся таблицы не проверяется и не обновляется!!!).
например:

CREATE TABLE IF NOT EXISTS `users` (`id` INT(11), `name` VARCHAR(32));
INSERT INTO `users` ...
чтобы быть увереным также и в структуре таблицы, можно сначала безопасно удалять таблицу, потом создавать:

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (`id` INT(11), `name` VARCHAR(32));
INSERT INTO `users` ...

Успехов.

Консультировал: HookEst
Дата отправки: 26.10.2006, 05:36
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное