Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Slavalp93 Member Откуда: Сообщений: 10 |
Делаю простенький запрос вида:Select * From Im_Fields Where F_LONGNAME = 'БАЗА' В результате - пусто. Хотя в данном поле есть значения 'БАЗА'. Предположил, что нужно указать явно colletion. Вот, что дает запрос к INFORMATION_SCHEMA.COLUMNS: SELECT CHARACTER_SET_NAME, COLLATION_NAME FROM [Imbase_integration].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'IM_FIELDS' and COLUMN_NAME='F_LONGNAME'; CHARACTER_SET_NAME = cp1251 COLLATION_NAME=Cyrillic_General_CS_AS И делаю теперь так: Select * From Im_Fields Where F_LONGNAME = 'БАЗА' COLLATE Cyrillic_General_CS_AS Но результат все также пустой. Подскажите как выбрать значения с фильтром по такому полю? |
9 апр 14, 13:25 [15855651] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Slavalp93, может, в таблице 'БАЗА' хранится не только строчными буквами? 'База', например. Cyrillic_General_CS_AS - это ж, всё-таки, Case Sensitive (..._CS_...) COLLATE. F_LONGNAME - какого типа? |
9 апр 14, 13:29 [15855682] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
SELECT * FROM Im_Fields WHERE F_LONGNAME = 'БАЗА' COLLATE Cyrillic_General_CI_AI;что вернёт? |
9 апр 14, 13:30 [15855693] Ответить | Цитировать Сообщить модератору |
Slavalp93 Member Откуда: Сообщений: 10 |
iap, Тоже пусто |
9 апр 14, 13:38 [15855756] Ответить | Цитировать Сообщить модератору |
Slavalp93 Member Откуда: Сообщений: 10 |
iap, F_LONGNAME - какого типа? varchar(64) |
9 апр 14, 13:40 [15855772] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37139 |
Еще раз: F_LONGNAME - какого типа? |
9 апр 14, 13:40 [15855774] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
И тип поля почему скрываете? Я же не зря, наверно, спросил. |
||
9 апр 14, 13:40 [15855775] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37139 |
|
||
9 апр 14, 13:41 [15855788] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
![]() Я проверил |
||||
9 апр 14, 13:43 [15855801] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
|
||||
9 апр 14, 13:44 [15855805] Ответить | Цитировать Сообщить модератору |
Slavalp93 Member Откуда: Сообщений: 10 |
declare @field varchar(64) = (SELECT F_LONGNAME FROM [base].[dbo].[IM_FIELDS] where F_KEY = 11) if @field = 'БАЗА' print 'ok' else print 'no' Пишет ok - значит все-таки правильное написание. И if CAST(@field as varbinary) = CAST('БАЗА' as varbinary)тоже ok А если теперь мой @field подставить в условие where - то пусто: Select * From [base].[dbo].[IM_FIELDS] where F_LONGNAME = @field Что может быть еще? |
||||
9 апр 14, 14:03 [15855943] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Slavalp93, а почему не просто SELECT F_LONGNAME FROM [base].[dbo].[IM_FIELDS] where F_KEY = 11? Даже ещё лучше: что возвращает SELECT QUOTENAME(F_LONGNAME) FROM [base].[dbo].[IM_FIELDS] where F_KEY = 11? А так выдаст что-нибудь: Select * From [base].[dbo].[IM_FIELDS] where F_LONGNAME = (SELECT T.F_LONGNAME FROM [base].[dbo].[IM_FIELDS] T where T.F_KEY = 11)? |
9 апр 14, 14:28 [15856124] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
поди сама база с регистрозависимым коллэйшеном и в ней 2 таблицы: Im_Fields и IM_FIELDS покажите результат select DATABASEPROPERTYEX('base', 'Collation') |
9 апр 14, 14:32 [15856152] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Slavalp93, а действительно, почему Вы имена одних и тех же объектов пишете буквами с разным регистром? Неряшливо и непрофессионально. IMHO. Как, всё-таки, хорошо, что у нас бинарный COLLATE! Дисциплинирует! |
9 апр 14, 14:38 [15856202] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
Типа того: declare @field varchar(64) = (SELECT F_LONGNAME FROM [base].[dbo].[IM_FIELDS] where F_KEY = 11) if @field = 'БАЗА' print 'ok' else print 'no' Select F_KEY From [base].[dbo].[IM_FIELDS] where F_LONGNAME = @field SET @field = 'БАЗА' Select F_KEY From [base].[dbo].[IM_FIELDS] where F_LONGNAME = @field |
||
9 апр 14, 14:48 [15856275] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
|
||
9 апр 14, 14:51 [15856306] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Есть ещё вариант, что запросы выполняются в разных базах |
9 апр 14, 14:54 [15856333] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
iap, как минимум, коллэйшен ТС показал от таблицы в базе Imbase_integration, а запрос выполняет в base, ну или для форума подтер название базы. короче, бардак во всем :) надо будет топик переименовать в "1000 причин, по к-ым человек шарит в одной таблице, думая при этом про другую, озадачивается сам и озадачивает других или ПОРЯДОК -- ПРЕЖДЕ ВСЕГО" |
9 апр 14, 15:04 [15856428] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Как меня забавляют гуманитарии в программировании. Оне так непосредственно обижаются на бездушный кремниевый механизм... Выполните, доложите результаты Select * From Im_Fields Where F_LONGNAME like '%' Select * From Im_Fields Where F_LONGNAME like 'Б%' Select * From Im_Fields Where F_LONGNAME like 'б%' Select * From Im_Fields Where F_LONGNAME like 'БА%' Select * From Im_Fields Where F_LONGNAME like 'Ба%' Select * From Im_Fields Where F_LONGNAME like 'бА%' Select * From Im_Fields Where F_LONGNAME like 'ба%' и прослезитесь... |
||
9 апр 14, 15:09 [15856467] Ответить | Цитировать Сообщить модератору |
Slavalp93 Member Откуда: Сообщений: 10 |
Всем, кто откликнулся на мой вопрос. Во-первых, прошу прощения за возможно не совсем правильную постановку вопроса. Я только начинающий в ms sql server. Во-вторых, да, в первом посте я изменил название базы на base. В-третьих, оказалось нужно привести значение 'БАЗА' к VARCHAR. Т.е. такие запросы работают: Select * From [Imbase_integration].[dbo].[IM_FIELDS] Where F_LONGNAME = Convert(VarChar,'БАЗА') или Select * From [Imbase_integration].[dbo].[IM_FIELDS] Where F_LONGNAME = N'БАЗА' Помогла ветка форума: [url=]https://www.sql.ru/forum/969176/ms-sql-ne-ponimaet-kodirovku-kirillica-v-sql-server-management-studio[/url] Всем спасибо и прошу прощения за свое ламерство. |
9 апр 14, 15:39 [15856688] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Феерическая глупость. |
||
9 апр 14, 15:48 [15856760] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
...а ведь просили коллэйшен базы показать ![]() если у ТС база некириллическая + только то поле в таблице кириллица: F_LONGNAME varchar(64) collate Cyrillic_General_CS_AS то про вот это поверю, что сработало: Select * From [Imbase_integration].[dbo].[IM_FIELDS] Where F_LONGNAME = N'БАЗА' а вот это -- нет: Select * From [Imbase_integration].[dbo].[IM_FIELDS] Where F_LONGNAME = Convert(VarChar,'БАЗА') |
9 апр 14, 15:49 [15856776] Ответить | Цитировать Сообщить модератору |
Slavalp93 Member Откуда: Сообщений: 10 |
o-o, Хотите верьте, хотите нет, но работают оба запроса. Collation сервера: SQL_Latin1_General_CP1_CI_AS Collation базы: Cyrillic_General_CI_AS |
9 апр 14, 15:53 [15856816] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8303 |
Намучаетесь с временными таблицами... Переустановите сервер в соответствии с сортировкой базы. |
9 апр 14, 16:10 [15856924] Ответить | Цитировать Сообщить модератору |
NickAlex66 Member Откуда: Сообщений: 319 |
Владислав Колосов, Collation сервера меняется без переустановки |
9 апр 14, 16:22 [15857026] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |