258
12 февраля 2004 года
SergeySV
1.5K / / 19.03.2003
Господа, никто не подскажет url в msdn или еще где, с описанием всевозможных спецсимволов, когда используется LIKE в WHERE.
Раньше для коннекта из проги на VB6 к бд Access использовал DAO, там все было понятно, полное соответствие оператору Like в VB.
Сейчас вместо DAO использую ADO.
Заранее спасибо.
Иван Абрамов, программист, CSBI.
http://adanalysis.narod.ru — моя программа для выбора авто.
13 янв 04, 16:25 [489811]
Re: Описание спецсимволов для LIKE в ADO ?
Темный
Member
Откуда: РФ, Москва
Сообщений: 1714 Синтаксис SQL ANSI 92
% = *
? = _ (если не ошибаюсь)
13 янв 04, 16:26 [489814]
Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member
Откуда: СПб
Сообщений: 63 Немного не так.
DAO ADO
* %
? _
а вот дальше?
что вместо #, !
^ — как в MS SQL Server — не работает.
Вообщем, нужен url к полному описанию.
13 янв 04, 16:47 [489860]
Хам трамвайный
из справки
Сравнение языка запросов Microsoft Jet SQL и ANSI SQL
Ядро базы данных Microsoft Jet SQL в основном совместимо с ANSI-89 Level 1. Однако некоторые возможности языка запросов ANSI SQL не реализованы в Microsoft Jet SQL. В выпуске Microsoft Jet версии 4.X для поставщика Microsoft OLE DB для Jet реализовано больше синтаксиса ANSI-92 SQL. Аналогично, язык запросов Microsoft Jet SQL содержит зарезервированные слова и возможности, не поддерживаемые языком ANSI SQL.
Основные различия
Языки Microsoft Jet SQL и ANSI SQL имеют разные зарезервированные слова и типы данных. Дополнительные сведения см. в разделах Зарезервированные слова языка SQL ядра базы данных Microsoft Jet и Эквивалентные типы данных ANSI SQL. При использовании поставщика Microsoft OLE DB для Jet с версией Jet 4.X существует несколько дополнительных зарезервированных слов.
Другие правила применяются для конструкции Between…And, которая имеет следующий синтаксис.
выражение1 [NOT] Between значение1 And значение2
В языке Microsoft Jet SQL значение1 может быть больше, чем значение2; в языке ANSI SQL значение1 должно быть меньше значения2 или равно ему.
В языке Microsoft Jet SQL при использовании оператора Like поддерживаются как подстановочные знаки языка ANSI SQL, так и подстановочные знаки, относящиеся к Microsoft Jet. Невозможно совместно использовать подстановочные знаки ANSI и Microsoft Jet. Допускается использовать только один набор знаков, их нельзя смешивать. Использование знаков языка ANSI SQL разрешено только с ядром Jet версии 4.X и с поставщиком Microsoft OLE DB для Jet. При попытке использования подстановочных знаков языка ANSI SQL с приложением Microsoft Access или объектами DAO они будут трактоваться как литералы. Обратное верно при использовании поставщика Microsoft OLE DB для Jet и ядра Jet версии 4.X. Символ соответствия Microsoft Jet SQL ANSI SQL
Любой текстовый символ ? знак подчеркивания (_)
Любое количество символов * %
В языке Microsoft Jet SQL меньше ограничений. Например, разрешается производить группировку и сортировку по выражениям.
Язык Microsoft Jet SQL поддерживает более производительные выражения.
Расширенные возможности языка Microsoft Jet SQL
Язык Microsoft Jet SQL обладает следующими расшиpенными возможностями.
Инструкция TRANSFORM обеспечивает поддержку перекрестных запросов.
Существуют дополнительные статистические функции SQL, такие как StDev и VarP.
Для определения параметров запроса используется описание PARAMETERS.
Возможности языка ANSI SQL, не поддерживаемые в языке Microsoft Jet SQL
Язык Microsoft Jet SQL не поддерживает следующие возможности языка ANSI SQL.
Ссылки в статистической функции DISTINCT. Например, в языке Microsoft Jet SQL невозможно использовать конструкцию SUM(DISTINCT имя_столбца).
Использование предложения LIMIT TO nn ROWS для ограничения числа строк, возвращаемых запросом. Для подобного ограничения можно использовать только предложение WHERE.
13 янв 04, 16:49 [489864]
Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member
Откуда: СПб
Сообщений: 63 То есть все так, сорри, Темный, и спасибо.
Но нужна полная картина.
13 янв 04, 16:51 [489869]
Re: Описание спецсимволов для LIKE в ADO ?
Senin Viktor
Member
Откуда: Подмосковье
Сообщений: 4087 описание символов и примеров LIKE бери из справки к MS SQL серверу
[ ] Any single character within the specified range ([a-f]) or set ([abcdef]).
(WHERE au_lname LIKE ‘[C-P]arsen’ finds author last names ending with arsen and
beginning with any single character between C and P, for example Carsen, Larsen,
Karsen, and so on.)
[^] Any single character not within the specified range ([^a-f]) or set
([^abcdef]). (WHERE au_lname LIKE ‘de[^l]%’ all author last names beginning with
de and where the following letter is not l.)
LIKE ‘5[%]’ 5%
LIKE ‘[_]n’ _n
LIKE ‘[a-cdf]’ a, b, c, d, or f
LIKE ‘[-acdf]’ -, a, c, d, or f
LIKE ‘[ [ ]’ [
LIKE ‘]’ ]
LIKE ‘abc[_]d%’ abc_d and abc_de
LIKE ‘abc[def]’ abcd, abce, and abcf
и т.д.
13 янв 04, 16:55 [489881]
Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member
Откуда: СПб
Сообщений: 63 Спасибо, Хам, но, опять же в твоей цитате упоминается лишь *(%) и ?(_).
А как на счет #, !, , [] ?
13 янв 04, 16:58 [489891]
Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member
Откуда: СПб
Сообщений: 63 описание символов и примеров LIKE бери из справки к MS SQL серверу
Да, я так и сделал.
Но, к удивлению обнаружил, что маски с ^ не работают, а с ! работают. Каша какая-то получается, вот и спросил.
13 янв 04, 17:03 [489900]
Откуда: СПб
Сообщений: 63 А что будет выдавать WHERE Phone1 LIKE ‘([0-9][0-9][0-9])[134567890]%’
Выдает все правильно, т.е. 6-ой символ не двойка.
13 янв 04, 18:01 [490023]
Re: Описание спецсимволов для LIKE в ADO ?
Senin Viktor
Member
Откуда: Подмосковье
Сообщений: 4087 ну а дальше объясни: почему именно АНСИ 92. Откуда оно взялось при работе VB6 с акесом (версия бд)?
13 янв 04, 18:02 [490031]
Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member
Откуда: СПб
Сообщений: 63 Из проги на VB6 при помощи ADO 2.5 идет запрос к бд формата MS Access 2000.
13 янв 04, 18:05 [490044]
Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member
Откуда: СПб
Сообщений: 63 ну а дальше объясни: почему именно АНСИ 92. Откуда оно взялось при работе VB6 с акесом (версия бд)?
Потому что используется ADO, а не DAO.
Спецсимволы * и ? и # не работают просто наглядно.
13 янв 04, 18:07 [490051]
Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member
Откуда: СПб
Сообщений: 63 проверил на MS SQL
WHERE (вв LIKE ‘[0-9][0-9][0-9][^2]%’)
рабоает правильно и возращает все записи за исключением 2
На MS SQL — то наверняка все правильно будет работать, а ты попробуй посредством ADO к бд Access2000. Драйвер (провайдер) сов. другой.
13 янв 04, 18:20 [490084]
Re: Описание спецсимволов для LIKE в ADO ?
Senin Viktor
Member
Откуда: Подмосковье
Сообщений: 4087 >На MS SQL — то наверняка все правильно будет работать, а ты попробуй посредством ADO к бд Access2000. Драйвер (провайдер) сов. другой.
Для АДО (при работе с mdb) надо применять % и _. Для отрицания ! (оператор сравнения такой же как < >) ^ — этот знак для работы с mdb (формат Акес2002+ANSI SQL 92) и MS SQL.
Хотя действительно можно запутаться и в справке по этому поводу — тишина.
14 янв 04, 09:15 [490413]
Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member
Откуда: СПб
Сообщений: 63 А как конвертировать числовое поле в текстовое, чтобы использовать с LIKE?
В DAO я бы написал так
WHERE CSTR(NumericField1) LIKE ‘*51*’
А в ADO (при коннекте к бд MSAccess2000) как?
Что-то типа WHERE …NumericField1… LIKE ‘%51%’
Заранее спасибо.
agregator Пользователь Сообщений: 214 |
Здравствуйте. Создаю запрос из Файла «Данные.xls» с помощью мастера создания запросов. Подскажите пожалуйста как создать запрос, который выдавал бы Марки содержащие «ПАЗ». Изменено: agregator — 13.04.2015 21:51:22 |
agregator Пользователь Сообщений: 214 |
Дописал запрос в Блокноте, но Microsoft Query выдает «Синтаксическая ошибка» Уч-к № ПЛ Дата ПЛ Смена Гар#№ Марка Таб#№ вод Водитель Время Отр# Изменено: agregator — 13.04.2015 21:51:48 |
TheBestOfTheBest Пользователь Сообщений: 2366 Excel 2010 +PLEX +SaveToDB +PowerQuery |
У вас колонка Марка непонятного для Query типа (то ли строка, то ли нет). Есть требования к формату источника данных, правда я их нигде не читал, вывел путем проб и ошибок: Для примера я явно преобразовал в where поле Марка в string с помощью ф-ии trim() Изменено: TheBestOfTheBest — 13.04.2015 19:14:34 Неизлечимых болезней нет, есть неизлечимые люди. |
agregator Пользователь Сообщений: 214 |
TheBestOfTheBest, большое спасибо за объяснения. Но никак не могу преобразовать поле Марка в string. В G2 писал «-» — не помогло. Покажите пожалуйста как это делается «преобразовал в where поле Марка в string с помощью ф-ии trim()» |
TheBestOfTheBest Пользователь Сообщений: 2366 Excel 2010 +PLEX +SaveToDB +PowerQuery |
#5 15.04.2015 23:20:37
Изучите ф-ию trim(), особенно то, что она возвращает. Неизлечимых болезней нет, есть неизлечимые люди. |
||
agregator Пользователь Сообщений: 214 |
#6 16.04.2015 15:50:47 TheBestOfTheBest, , вы имеете ввиду
Если открыть в Excel этот запрос или ранний, то данные подтягиваются как надо. Но дело в том, что я хочу использовать запрос как источник для сводной таблицы, а использовать для сводной таблицы не получается — Microsoft Query пишет «Синтаксическая ошибка». Как решить эту проблему? Изменено: agregator — 16.04.2015 15:54:18 Excel всемогущий. |
||
TheBestOfTheBest Пользователь Сообщений: 2366 Excel 2010 +PLEX +SaveToDB +PowerQuery |
Изменить формат таблицы-источника. PS С query не работаю, т.к.очень глючит и не все позволяет реализовать. Изменено: TheBestOfTheBest — 16.04.2015 15:59:32 Неизлечимых болезней нет, есть неизлечимые люди. |
agregator Пользователь Сообщений: 214 |
TheBestOfTheBest, пробовал создать запрос из файла «Данные TheBest.xls» с помощью мастера запросов, ничего не получилось. Пробовал использовать «Запрос из Excel Files.odc» как источник для сводной таблицы, не смог указать на него как на источник. Изменено: agregator — 16.04.2015 19:13:25 |
TheBestOfTheBest Пользователь Сообщений: 2366 Excel 2010 +PLEX +SaveToDB +PowerQuery |
#9 16.04.2015 19:15:47
добивайтесь !
тренируйтесь ! Неизлечимых болезней нет, есть неизлечимые люди. |
||||
agregator Пользователь Сообщений: 214 |
TheBestOfTheBest,это можно сделать средствами Excel? |
TheBestOfTheBest Пользователь Сообщений: 2366 Excel 2010 +PLEX +SaveToDB +PowerQuery |
#11 16.04.2015 19:45:56 Коллега, формат форума предполагает помощь, но не обучение. Если вы задаете вопрос, то как минимум должны уметь понять ответ. Иначе получится курс обучения по использованию подключений к внешним источникам данных. ЗЫ
а как же по-вашему получен файл #8 ? Средствами Excel Неизлечимых болезней нет, есть неизлечимые люди. |
||
JeyCi Пользователь Сообщений: 3387 |
#12 16.04.2015 20:28:57
поэтому лучше предупреждать об этом заранее… где источник, а где Сводная Таблица? — если в одном файле, то будут проблемы — описано здесь (в ветке Ищу ХОРОШУЮ книгу по сводным таблицам — пост№49) … там же чуть ниже пост от BankirS с вариантом автообновления сводной макросом… источник сводной и саму сводную лучше располагать в разных файлах! иначе проблемы с запросами файла самого на себя… либо KL предлагал вариант макросом через ADO (к сожалению, по ветке не поместился файл, а файлообменники уже его затёрли)… для инфо: Использование библиотеки ADO (если вариант UpdatePivotTable от BankirS не подойдёт) Изменено: JeyCi — 16.04.2015 20:31:43 чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах) |
||
TheBestOfTheBest Пользователь Сообщений: 2366 Excel 2010 +PLEX +SaveToDB +PowerQuery |
#13 16.04.2015 20:38:09
на новом листе Данные-Существующие подключения- выбрать из раздела Подключения в этой книге созданное подключение. Открыть нужное. Неизлечимых болезней нет, есть неизлечимые люди. |
||
agregator Пользователь Сообщений: 214 |
Всем большое спасибо за помощь. Сделал как написал TheBestOfTheBest в 13 сообщении и всё получилось. |
JeyCi Пользователь Сообщений: 3387 |
#15 17.04.2015 15:42:11
подкреплю ветку скринами…
P.S. иногда на предпоследнем шаге тоже говорит… НЕРАСПОЗНАВАЕМЫЙ ФОРМАТ Базы Данных… — но этот вопрос решён — если на скрине 3 не забыть указать имя в поле, до нажатия кнопки Создать Изменено: JeyCi — 17.04.2015 16:38:49 чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах) |
|||
JeyCi Пользователь Сообщений: 3387 |
p.s. Создание сводной таблицы на основе внешнего источника данных хорошо описано у дружественного сайта… но там на примере .mdb-файлов… — можно создавать Сводную и по ходу формировать нужный запрос — как альтернативный вариант для ТС Изменено: JeyCi — 17.04.2015 15:56:20 чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах) |
TheBestOfTheBest Пользователь Сообщений: 2366 Excel 2010 +PLEX +SaveToDB +PowerQuery |
#17 17.04.2015 16:37:44
В данном случае подключение в файле было, коллега спросил как сделать сводную из него . Если подключения нет, его придется создавать, кодом или query. Я обычно создаю через query любое попроще и дописываю свойства подключения ручками. Query — кране глючный инструмент, даже where дает ошибки. Изменено: TheBestOfTheBest — 17.04.2015 16:51:06 Неизлечимых болезней нет, есть неизлечимые люди. |
||
JeyCi Пользователь Сообщений: 3387 |
#18 17.04.2015 16:40:10
теперь можно тренироваться Изменено: JeyCi — 17.04.2015 16:41:33 чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах) |
||
- Remove From My Forums
-
Question
-
User-1240292594 posted
Any Ideas are appreciated!
I’m trying to run a Microsoft Query against one of my SQL Databases, pulling the data into Excel 2003. (Data > Import External Data > New database Query)
Basically, I have a field called ‘[Identity]’ and each time I try and drop in any of the fields from that same table I see an error@ «Incorrect Syntax near the keyword ‘Identity’. Statements could not be prepared»
Any Ideas?
Answers
-
User-949955009 posted
You can use quoted identifier for the column such as:
select table.»column» from table in your case select Data.»Identity» from Data
However, you should have QUOTED_IDENTIFIER ON for this to work. [It is on by default]
-
Marked as answer by
Thursday, October 7, 2021 12:00 AM
-
Marked as answer by
-
#2
Are you trying to define the criteria in the Query Wizard or in the SQL Query Editor?
In either case you should be able to select the field name and criteria value (if it exists in the dataset) from dropdown lists.
-
#4
When you are in the MS Query editor, click on the «SQL» button. That will show you the SQL query statement that was build using the Wizard.
It should look something like this.
SELECT MyData.`Transfer #`, MyData.Name, MyData.`Order`, MyData.Sales
FROM `C:testMyfile_SQL data.xlsx`.MyData MyData
WHERE (MyData.`Transfer #`=’4 digit number’)
Copy and Post that code to this thread. Also, post the error message that you are getting when you try to run the query.
If the field name doesn’t match your data exactly, then edit it in this SQL dialog and save the changes.
I’m using MS Query in Excel to execute the following query:
select
iif(egachid <>'GCAJA0', True, False)
from fgledg
where egcono='1'and egdivi='D30'and egvono=51166554
I have a tabel, fgledg, that contains a column, egchid. For a specific voucher (egvono = 51166554) I get the following rows:
EGCONO EGDIVI EGYEA4 EGVONO EGCHID
1 D30 2015 51166554 GCAJA0
1 D30 2015 51166554 GCAJA0
1 D30 2015 51166554 GCAJA0
1 D30 2015 51166554 GCAJA0
1 D30 2015 51166554 SEBSHHASP
1 D30 2015 51166554 SEBSHHASP
1 D30 2015 51166554 SEBSHHASP
I would like my query to return True if the column egchid contains other values than GCAJA0 and false if the column only contains the value GCAJA0, but I keep getting error messages no matter how i write the syntax. It seems to accept the iif function at least, but the syntax is incorrect?
I have tried diffrent variations of writing the syntax, but get the following error messages:
IIf(egachid <>'GCAJA0', True, False) Token <> was not valid
IIf(egachid = 'GCAJA0', False, True) Token = was not valid
IIf([egachid] <>'GCAJA0', True, False) Token [ was not valid
IIf([egachid] <>'GCAJA0', 'True', 'False') Token [ was not valid
What am I doing wrong?