Как в access преобразовать текст в число
Перейти к содержимому

Как в access преобразовать текст в число

  • автор:

Как написать код для преобразования текста в число?

База данных, над которой я работаю, имеет поле в одной таблице в виде текста, тогда как в другой таблице поле в числовом формате. Я вообще не могу изменить формат поля в базе данных. Поэтому мне нужно знать, как преобразовать поле из текста в число, прежде чем связывать (или присоединяться) таблицы для извлечения данных.

TblCoachingDB.SourceID — это ТЕКСТ, тогда как tblCoachingDBSource.ID — это НОМЕР.

2 ответа

Вы можете использовать CStr() для преобразования числа в текст и JOIN в другое текстовое поле.

На самом деле я бы пропустил предложение WHERE до тех пор, пока вы не подтвердите, что JOIN работает правильно.

Изначально вы просили JOIN преобразовать текстовое поле в число. Вместо этого я сначала предложил текст, потому что я помню, что Access был менее склонен возражать. Но моя память об этом шаткая, и если вы хотите числовые значения для обеих сторон JOIN , посмотрите, какой из них (если есть) лучше всего подходит для вас:

Примечание. Я предложил это предложение только потому, что вы сообщили нам, что вам не разрешено изменять дизайн таблицы tblCoachingDB , чтобы сделать SourceId числовым, а не текстовым типом данных. Поскольку вы не можете внести это изменение, вам придется смириться с влиянием на производительность во время выполнения преобразования типа данных поля JOIN . Это не хорошо, но я не знаю, насколько это будет плохо. Удачи.

преобразовать текст в число в операторе выбора ms access 2010

Мне нужно выполнить запрос к массивной (650 МБ) таблице данных в MS Access 2010. Все типы данных для полей текстовые, но некоторые поля содержат все числа, хотя тип данных текстовый. Поэтому мне нужно преобразовать текст в long int, чтобы выбрать, например, все записи, которые имеют значение больше 10 в указанном поле. Но всякий раз, когда я это делаю, я получаю ошибку несоответствия типов, предположительно из-за сравнения числового значения текстового поля. Вот SQL для запроса, который должен выбирать из полей, которые все имеют текстовый тип данных.

Я попытался преобразовать тип данных поля в длинное целое число в режиме конструктора, но операция завершается сбоем с сообщением о том, что для выполнения операции недостаточно памяти.

Может ли кто-нибудь показать мне, как исправить приведенный выше код, чтобы он выбирал все записи со значениями больше 10, не выдавая ошибку преобразования типа?

Возможно, вам придется экспортировать все данные, правильно настроить базу данных (либо отредактировать существующую базу данных после удаления всех ранее экспортированных данных ИЛИ создать НОВУЮ копию базы данных), а затем импортировать данные в базу данных, чтобы вернуть все на место. Я должен был сделать это однажды в проекте, и это спасло день. размер вашей базы данных больше, чем то, с чем я работал. удачи. — tamak

Access 2007

Для быстрого поиска нужных вам функций Access предлагает компонент, именуемый Построителем выражений. Для его запуска выполните следующие действия:

1. Откройте запрос в Конструкторе.

2. Щелкните правой кнопкой мыши поле, в которое вы хотите вставить выражение, и выберите команду Построить (Build).

Если вы создаете вычисляемое поле, нужно щелкнуть правой кнопкой мыши в ячейке Поле, Если создается условие отбора, следует щелкнуть правой кнопкой мыши в ячейке

После выбора команды Построить на экране появляется окно Построителя выражений, отображающее текущее содержимое поля (рис. 7.3).

Рис. 7.3. Построитель выражений состоит из текстового поля в верхней части окна, в котором можноредактировать выражение, кнопок быстрой вставки знаков обычных операций (таких как +, -, / и *, если почему-либо вы не можете их найти на клавиатуре), и трехпанельного обозревателя в нижней части окна, который поможет найти нужные поля и функции

3. Вставьте или отредактируйте выражение.

У Построителя выражений есть два ускоряющих приема работы, которые вы, может быть, захотите испробовать. Можно вставлять имя без ввода с клавиатуры (рис. 7.4) и можно найти функцию с помощью обзора (рис. 7.5).

Построитель выражений — универсальное средство создания выражений в вычисляемых полях и условиях отбора. Некоторые параметры имеют смысл только в одном из его назначений. Логические операторы, такие как символ равенства (=), And, Or, Not и Like, удобны для задания условий фильтрации (см. разд. «Построение условий отбора» главы 6), но бесполезны в вычисляемых полях.

Рис. 7.4 . Для вставки имени поля щелкните дважды кнопкой мыши папку Таблицы в самом левом списке. Затем щелкните мышью вложенную папку, соответствующую нужной вам таблице. И, наконец, дважды щелкните кнопкой мыши имя поля в среднем списке для добавления его в ваше выражение. Этот прием рекомендуется только тем, кто любит щелкать кнопкой мыши

Рис. 7.5 . Для поиска функции начните с двойного щелчка кнопкой мыши папки Функции в левом списке. Затем выберите вложенную папку Встроенные функции. (Другие варианты отображают любые пользовательские функции, которые вы добавили в вашу БД с помощью пользовательского кода VBA.) Далее выберите категорию функции в среднем списке. В правом списке показаны все функции в выбранной категории. Вы можете дважды щелкнуть кнопкой мыши функцию для вставки ее в выражение

Когда вы вставляете имена полей в Построителе выражений, они записываются в более длинном формате с обязательным указанием имени таблицы. Вы увидите [Products] ! [Price] вместо просто [Price]. He волнуйтесь — для программы Access это одно и то же.

4. Щелкните мышью кнопку ОК .

Программа Access скопирует ваше новое выражение в ячейку Поле или Условие отбора.

Когда в Построителе выражений вставляется функция, программа добавляет заполнители (например, <number> и <precision>), на место которых нужно ввести аргументы. Замените этот текст нужными вам значениями.

Рис. 7.6. В справке функции Round () описываются ее назначение и два параметра. Второй параметр — количество знаков в дробной части — заключен в квадратные скобки, что означает необязательное значение. Пропустите его, и программа Access округлит значение до ближайшего целого числа. Слева приведен перечень функций, который позволяет просмотреть любую другую функцию Access и прочесть ее описание

Большинство специалистов Access считают Построитель выражений слишком тяжеловесным, чтобы использовать его в работе. Но несмотря на то, что это не самое эффективное средство написания выражений, построитель предоставляет прекрасный способ знакомства с новыми загадочными функциями, благодаря своей справке для встроенных функций. Если вы нашли функцию, которая кажется многообещающей, но хотите получить дополнительную информацию, выберите ее в списке и щелкните мышью кнопку Справка (Help). Вы будете вознаграждены кратким резюме, объясняющим назначение функции и описывающим ее параметры, которые нужно задать, как показано на рис. 7.6.

Format ( ) — интересная математическая функция, преобразующая числа в текст. Она интересна, потому что создаваемый текст можно отформатировать несколькими способами, управляя, таким образом, представлением чисел.

Для того чтобы понять разницу, вернемся к выражению, использованному ранее для снижения цены:

SalePrice: [Price] * 0.95

Даже если у поля Price не Денежный тип, вычисленные значения в поле SalePrice (продажная цена) выводятся как обычные числа (без знака валюты, разделителя тысяч и т. д.). Вы увидите значение 43.2 вместо желаемого $43.20.

Решить эту проблему можно, применив функцию Format ( ) для задания денежного формата вывода:

SalePrice: Format([Price] / 0.95, «Currency»)

Теперь вычисленные значения содержат знак валюты. Более того, поскольку денежные суммы отображаются с двумя знаками после точки, вам не нужно больше применять функцию Round ( ).

Хитрость применения функции Format () состоит в выборе текста, задаваемого в качестве второго аргумента для получения желаемого результата. В табл. 7.2. приведены возможные варианты.

Таблица 7.2. Варианты форматирования

Выводит число с двумя знаками в дробной части,

разделителями для тысяч и знаком валюты

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

Выводит на экран число с двумя десятичными знаками

и разделителями тысяч

Отображает процентное значение (число, умноженное

на 100, и со знаком процента). Выводит две цифры

справа от десятичной точки

Отображает число в научной нотации с двумя деся-

Таблица 7.2 (окончание)

Отображает Нет, если число равно 0, и Да, если число

отлично от 0. Можно использовать аналогичные

типы формата Истина/Ложь и Вкл/Выкл

Практические занятия для опытных пользователей. Улучшенные числовые форматы

Истинные педанты не будут довольны вариантами, перечисленными в табл. 7.2. Им нужен полный контроль количества десятичных знаков в числе. Один из возможных вариантов — использовать функции FormatCurrency( ), FormatPercent ( ) и FormatNumber ( ) (в зависимости от необходимости вывода значения как денежного, процентного или обычного числового). В этих функциях в качестве первого аргумента задается число, которое нужно отформатировать, а в качестве второго — число десятичных знаков, которое нужно сохранить.

Для более полного контроля можно определить собственный формат, точно описывающий то, что вы хотите получить, и затем применить его в функции Format (). В данной книге не рассматриваются пользовательские числовые форматы, по вы можете посмотреть дополнительную информацию в справочной системе программы Access (см. рис. 7.6).

Дополнительные математические функции

Математическим функциям в программе Access не уделяется должного внимания, потому что потребность в них возникает крайне редко. Вы уже видели функции Round ( ) и Format ( ) — самые полезные в этой категории — но есть еще несколько других (табл. 7.3), к которым знатоки Access обращаются время от времени в вычисляемых полях.

Таблица 7.3. Функции для числовых данных

Извлекает квадратный корень

Возвращает положительное значение

(отрицательные числа становятся положитель-

Округляет число до заданного числа десятичных

Возвращает целую часть числа, отбрасывая

любую дробную часть

То же что функция Fix (), но отрицательные

числа округляются до ближайшего меньшего

целого числа, а не большего

Таблица 7.3. (окончание)

дробное число в диапазоне

данные в текстовом поле в

настоящее число так, что

Преобразует число в

Малоизвестная или недооцененная возможность. Использование случайных чисел для сортировки в случайном порядке

Функцией Rnd ( ) пользуются редко — в конце концов, кому нужны столбцы, заполненные искусственно сгенерированными данными? Однако инициативные гуру Access предложили одно интригующее применение для функции Rnd ( ). Они применяют ее для сортировки таблицы, таким образом, чтобы записи выводились в случайном порядке.

По существу вы добавляете вычисляемое поле, содержащее случайное число. Можно использовать в поле выражение, такое как Random: Rnd ( ). Если посмотреть результаты вашего запроса, то можно увидеть случайное значение в диапазоне от 0 до 1 (например, 0.7045, 0.2344 и т. д.) рядом с каждой записью.

Теперь вернитесь в Конструктор и сбросьте флажок Вывод на экран для того, чтобы поле Random не выводилось на лист данных. Далее выберите порядок в ячейке Сортировка по возрастанию или по убыванию (что на самом деле не имеет значения) и снова выполните запрос. Ву-а-ля! Каждое выполнение запроса выводит на экран записи в разном порядке, в соответствии со случайными числами, которые программа Access генерирует на лету.

Все функции, которые вы видели до этого момента, работали с числовыми данными. Но с текстом тоже можно делать многое. В целом есть три способа обработки текста.

■ Слияние текста. Вы можете соединить несколько текстовых полей в одном. Для этого способа не нужна функция — достаточно оператора &, описанного в разд. «Выражения с текстовыми значениями «ранее в этой главе.

 Извлечение подстроки из текстовой строки. Может быть, вам потребуется первое слово из заголовка или первые 100 символов в описании.

■ Замена строчных букв прописными и наоборот. Возможно, вы захотите отобразить строчные буквы прописными или наоборот.

В табл. 7.4 перечислены функции, наиболее часто применяемые для обработки текста.

Таблица 7.4. Функции для работы с текстом

Выводит текст прописными буквами

Выводит тест строчными буквами

Выводит заданное вами число символов,

начиная от левого края строки

Выводит заданное вами число символов,

Right («Hi There», 5)

начиная от правого края строки

Выводит часть строки, начиная с заданной

позиции, и заданное число символов

Удаляет пробелы с обеих сторон (или

используйте LTrim ( ) и RTrim( ) для

Подсчитывает количество символов в

С помощью этих функций вы можете создать вычисляемое поле, которое отображает фрагмент длинной текстовой строки или изменяет вид отображения (строчные или прописные буквы). Применение этих функций в условиях отбора не столь очевидно. Можно создать условие фильтрации, задающее совпадение с частью текстовой строки, а не со всей строкой. Далее приведен пример условия отбора, выбирающего записи, начинающиеся с «Choco»: Left([ProductName], 5) = «Choco»

На рис. 7.7 показано, как ввести это условие отбора.

Функция Len ( ) — особый случай. Она проверяет текстовое значение и возвращает числовую информацию (в данном случае количество символов в строке, включая все пробелы, буквы, цифры и специальные символы). Эта функция не слишком полезна в простых вычисляемых выражениях, т. к. вас редко будет интересовать количество букв в текстовой строке. Но она позволяет создавать интересные условия отбора, включая, например, такое, которое отбирает все записи с полем Description короче 15 символов.

Практические занятия для опытных пользователей. Как извлечь первое слово из текстовой строки

Функции обработки строк созданы с ориентацией на символы. Они умеют подсчитывать символы, но не понимают, что такое слово пли предложение.

Единственный способ обойти это ограничение — применить функцию Instr ( ), которая ищет один или несколько символов в текстовой строке. (Название Instr ( ) — это сокращение от «in string», поскольку вы ищите конкретные символы внутри текстовой строки.) Для поиска символов «he» с строке «Hi There» нужно применить функцию Instr ( ) следующим образом: Instr(«Hi There», «he»)

Результат равен 5, потому что текст «he» начинается с пятой символьной позиции. Если программа Access не находит совпадения, функция Instr ( ) возвращает 0. Если же есть множественные совпадения, Instr () возвращает позицию первого.

Сама по себе эта функция не очень полезна в условиях отбора и вычисляемых полях. Но ее можно использовать в сочетании с другими функциями, такими как Mid ( ) и Left ( ), для вырезания части строки, расположенной рядом с какой-либо буквой. Можно применить функцию Instr ( ) для поиска первого пробела и вырезать весь текст до этого пробела. Таким образом, вы извлечете целое слово.

Далее приведено слегка ошеломляющее вычисляемое поле, которое получает первое слово из поля ProductName с помощью вложенных функций (см. разд. «Вложенные функции» ранее в этой главе). Оно разбито на несколько строк для того, чтобы разместить его на странице книги. Когда будете его набирать, поместите все выражение в одну строку.

Left([ProductName], Instr([ProductName], » » — 1 ) )

Это выражение переводится следующим образом: «Найди позицию первого пробела, вычти единицу и извлеки все символы слева от пробела». Вычислите это поле для значения Banana Cream Fudge и вы получите вырезанный текст Banana, что выглядит как впечатляющий яркий трюк.

Рис. 7.7 . Функции Left ( ), Right ( ) и Mid ( ) действуют во многом аналогично ключевому слову Like, помогая найти совпадения кусочков длинной текстовой строки

Функции для обработки дат

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

(см. разд. «Поля с датами «ранее в этой главе). Но вы можете выполнить гораздо больше действий с помощью некоторых функций Access для работы с датами.

Несомненно, многие применяют функции Now () и Date (), с которыми вы познакомились в главе 4. Эти функции извлекают текущие дату и время или только текущую дату. Их можно применять в запросах, работающих с заказами, принесшими доход в текущем году.

Вот условие для выбора просроченных проектов: =<Date ( )

Вставьте его в ячейку Условие отбора поля DueDate (срок платежа) и вы увидите только те записи, в которых поле DueDate содержит дату, наступившую ранее нынешнего дня.

Анализ дат может быть более сложным в сочетании с функцией DatePart (), которая извлекает часть информации из даты. DatePart () может определить номер месяца или год, позволяя игнорировать другие подробности (такие как число или время). С помощью DatePart () и Date () можно легко написать условие фильтрации, отбирающее заказы, сделанные в текущем месяце.

DatePart(«m», [DatePlaced])=DatePart(«m», Date())

And DatePart(«yyyy», [DatePlaced])=DatePart(«yyyy», Date ())

Это довольно длинное выражение на самом деле представляет собой комбинацию двух условий, соединенных ключевым словом And. Первое условие сравнивает номер месяца текущей даты с датой, хранящейся в поле DatePlaced:

DatePart(«m», [DatePlaced])=DatePart («m», Date( ))

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

DatePart(«yyyy», [DatePlaced])=DatePart(«yyyy», Date ( ))

Сложность применения функции DatePart ( ) (и некоторых других функций для дат) заключается в понимании идеи компонентов, составляющих дату. Применяя символ m в функции DatePart ( ), вы получите номер месяца, а используя текст уууу, извлечете четерехсимвольный номер года. В табл. 7.5 приведены все возможные варианты.

Таблица 7.5. Компоненты даты

Значение на 20 февраля, 2006 г. 1:30 РМ

Год в четырехсимвольном формате

Квартал от 1 до 4

Месяц от 1 до 12

День в году, от 1 до 365 (обычно)

День в месяце от 1 до 31

День недели, от 1 до 7

Таблица 7.5 (окончание)

Значение на 20 февраля, 2006 г. 1:30 РМ

Неделя в году, от 1 до 52

Минута, от 1 до 60

Секунда, от 1 до 60

Для тех, кто понимает. Вычисления для дат и времени

Используя функции для дат, всегда следует помнить о датах, содержащих информацию о времени. (Напоминаю, все даты могут содержать данные о времени суток. Но, выбирая подходящий формат для поля с датами, вы сообщаете программе Access о том, нужно ли отображать временной компонент даты и разрешать пользователям вводить его, как объясняется в разд. «Дата/время » главы 2. Чаще всего вы будете пользоваться форматом, скрывающим любую информацию о времени суток.)

Проблема: функция Date ( ) возвращает текущую дату со значением времени суток, равным 0. Другими словами, если текущая дата — 4 июля 2008 г., то функция Date ( ) возвращает первую секунду 4 июля 2008 г. — момент, когда часы показывают полночь (12:00 a.m.)

Если вы не храните значения времени суток, эта проблема не важна, поскольку у всех ваших дат время суток равно 0. Но что произойдет, если вы используете Полный формат даты (см. табл. 2.3) в поле DueDate, разрешающий пользователям вводить и дату, и время. Теперь у условия отбора =<Date ( ) несколько иной смысл — вы сообщаете Access о необходимости отобрать, как совпадающие, все поля с датами, наступившими до первой секунды текущего дня. Это условие не выберет запись со сроком платежа, назначенным на 16:00 текущего дня.

В данной ситуации, возможно, нужно изменить условие отбора на следующее: <(Date()+l)

Date () +1 — это завтра. Другими словами, это условие отбирает любые записи со сроком платежа, истекшим до первой секунды завтрашнего дня.

Между прочим, у программы Access есть функция Now (), возвращающая текущую дату и время. Таким образом, следующее условие фильтрации отбирает все записи, соответствующие текущему моменту (текущего дня) или любому моменту времени во все предшествующие дни:

Компоненты дат применяются в нескольких функциях обработки дат, включая функции DatePart ( ), DateAdd ( ) и DateDiff ( ). В табл. 7.6 приведены эти и дополнительные полезные функции, относящиеся к датам.

VBA Excel. Функции преобразования типов

Функции преобразования типов данных в VBA Excel. Наименования функций, синтаксис, типы возвращаемых данных, диапазоны допустимых значений выражения-аргумента.

Синтаксис функций преобразования

Выражение (аргумент) – это любое строковое или числовое выражение, возвращающее значение, входящее в диапазон допустимых значений для аргумента. Выражение может быть представлено переменной или другой функцией.

Если аргумент, переданный в функцию, не входит в диапазон типа, в который преобразуются данные, происходит ошибка.

Функции преобразования типов

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

Функция Тип данных Диапазон значений аргумента
CBool Boolean Любое допустимое строковое или числовое выражение.
CByte Byte От 0 до 255.
CCur Currency От -922 337 203 685 477,5808 до 922 337 203 685 477,5807.
CDate Date Любое допустимое выражение даты.
CDbl Double От -1,79769313486231E308 до -4,94065645841247E-324 для отрицательных значений; от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений.
CDec Decimal 79 228 162 514 264 337 593 543 950 335 для чисел без десятичных знаков. Для чисел с 28 десятичными знаками диапазон составляет 7,9228162514264337593543950335. Наименьшим возможным числом, отличным от нуля, является число 0,0000000000000000000000000001.
CInt Integer От -32 768 до 32 767, дробная часть округляется.
CLng Long От -2 147 483 648 до 2 147 483 647, дробная часть округляется.
CSng Single От -3,402823E38 до -1,401298E-45 для отрицательных значений; от 1,401298E-45 до 3,402823E38 для положительных значений.
CStr String Результат, возвращаемый функцией CStr, зависит от аргумента Выражение.
CVar Variant Диапазон совпадает с типом Double для числовых значений и с типом String для нечисловых значений.

Дополнительно для VBA7:

Функция Тип данных Диапазон значений аргумента
CLngLng LongLong От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, дробная часть округляется. Действительно только для 64-разрядных платформ.
CLngPtr LongPtr От -2 147 483 648 до 2 147 483 647 для 32-разрядных платформ, от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 для 64-разрядных платформ, дробная часть округляется в обоих типах систем.

Примеры преобразования типов

Функция CBool

Функция CBool используется для преобразования выражений в тип данных Boolean.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *