Имя: Пароль:
IT
Админ
Запрос SELECT не выбирает часть данных с условием
,
0 Corvax46
 
01.12.14
17:09
MS SQL 2005 SP4
Есть запрос:

SELECT Field1, Field2, Field3, Field4 FROM Table1

Данные выбираются отлично. Делаю запрос с условием:

SELECT Field1, Field2, Field3, Field4 FROM Table1 WHERE LTrim(RTrim(Field3))='TextValue'

В результате запроса записей нет.
Хотя в запросе без условия такие записи есть.
Значение для условия копировал.
1 ДенисЧ
 
01.12.14
17:10
Условие не подходит. Ваш Кэп
2 Wobland
 
01.12.14
17:11
бывает
3 Wobland
 
01.12.14
17:11
я бы очки сменил
4 pessok
 
01.12.14
17:12
вероятно у тебя таки в полях то без тримов записи
5 Corvax46
 
01.12.14
17:13
без тримов тоже пробовал, не выбирает. Беру любую другую запись, пашет... на части - нет. Около 50 записей из 25000 приблизительно
6 Ненавижу 1С
 
гуру
01.12.14
17:17
попробуй так:

WHERE Field3 LIKE '%TextValue%'
7 pessok
 
01.12.14
17:17
тогда проверяй "с" и "c" итп.
8 Wobland
 
01.12.14
17:18
(6) "TextValueTextValue" попадёт. что несколько не согласуется с (0)
9 pessok
 
01.12.14
17:19
+(7) я помню много секса при загрузке данных из экселя, когда добрые кадровички копипастили данные, а ты в фамилиях откуда-то появлялась латиница
10 Corvax46
 
01.12.14
17:24
(6) LIKE не помог
(9) значемние для условия - строка, но используются только цифры (отбор по штрих-коду)
11 rsv
 
01.12.14
17:26
(10) Нуууу занчится добавить UPPER и.... все символы принудительно на аглицкий патамушта в таблице значение TextValue могут быть символы и на русском
12 pessok
 
01.12.14
17:27
(10) ну так с этого и надо было начинать...
колонка в таблице какой тип имеет?
13 Гёдза
 
01.12.14
17:29
Регистр совпадает?
14 Гёдза
 
01.12.14
17:29
Какой collation?
15 rsv
 
01.12.14
17:30
т.е. по хорошему должна быть временная (таблица Table1 ) где  поле  Field3 должно быть уже подготовленным.
16 Corvax46
 
01.12.14
17:36
(11) в TextValue только цифры :-(
17 pessok
 
01.12.14
17:40
(16) ты не прочитал (12)

WHERE LTrim(RTrim(Field3))='TextValue'
как бы намекает, что ты отдаешь ему строку, а в таблице у тебя числа. а теперь вспомни как, например, эксель работает со значениями типа '100200300000'
18 Corvax46
 
01.12.14
17:42
чар25, не нулл
19 pessok
 
01.12.14
17:43
(18) а зачем хранить числовые данные в char?
20 Corvax46
 
01.12.14
17:45
(19) База 7.7 на скуле
Это справочник ШК, поле наименование
21 pessok
 
01.12.14
17:48
(20) ясно. ну тут тогда придется еще как-то проверять на возможные символы переноса строк и нерастяжимого пробела...

для начала попробуй выполнить запрос без фильтра, скопировать значение поля, которое потом надо отобрать, вставить его в where. Если и так не отберет, то хз. Если отберет, значит реально какие-то кривые символы
22 Ёпрст
 
01.12.14
17:49
если лайк не помог - то либо передаешь в условие хрень, либо в поле нет такого значения, усё.
23 SUA
 
01.12.14
18:05
в 7.7 LIKE должен работать
24 Corvax46
 
01.12.14
18:10
(21) копипаст в условии не отобрал
Помогает перезапись справочника интерактивная.
25 DS
 
01.12.14
18:13
(24) Переиндексация таблицы?
26 Corvax46
 
01.12.14
18:19
Переиндексация в плановом задании стоит каждую ночь. Выгрузка загрузка не помогла. Причём программная перезапись справочника ШК не помогает то же
27 КонецЦикла
 
01.12.14
18:29
Зачем лтрим, ртрим
Наведи порядок в данных, блеать
28 Jaap Vduul
 
01.12.14
18:34
Скорее всего, наличие спец. символов.Скорее всего, наличие спец. символов.
select cast(Field3 as varbinary(max))
и проверяй, что за символы.
29 Sj
 
01.12.14
18:37
Вот так делай
30 Sj
 
01.12.14
18:37
SELECT Field1, Field2, Field3, Field4 FROM Table1 WHERE LTrim(RTrim(Field3))='TextValu'

SELECT Field1, Field2, Field3, Field4 FROM Table1 WHERE LTrim(RTrim(Field3))='TextVal'

SELECT Field1, Field2, Field3, Field4 FROM Table1 WHERE LTrim(RTrim(Field3))='TextVal'

и смотри, когда появится результат
31 Jaap Vduul
 
01.12.14
18:43
(30)
Никогда?
32 Corvax46
 
01.12.14
18:43
(28) прошу прощения, не понял задумку
(30) нет результата
33 Sj
 
01.12.14
18:45
SELECT Field1, Field2, Field3, Field4 FROM Table1 WHERE LTrim(RTrim(Field3))='TextVa'

SELECT Field1, Field2, Field3, Field4 FROM Table1 WHERE LTrim(RTrim(Field3))='TextV'

SELECT Field1, Field2, Field3, Field4 FROM Table1 WHERE LTrim(RTrim(Field3))='Text'

SELECT Field1, Field2, Field3, Field4 FROM Table1 WHERE LTrim(RTrim(Field3))='Tex'

?
34 Sj
 
01.12.14
18:48
Left(Field3,3)='Tex'
35 Sj
 
01.12.14
18:48
чот тупанул...
36 Sj
 
01.12.14
18:48
Left(Field3,4)='Text'
37 Corvax46
 
01.12.14
18:51
О как...
SELECT [ROW_ID]
      ,[ID]
      ,[CODE]
      ,[DESCR]
      ,[PARENTEXT]
      ,[ISMARK]
      ,[VERSTAMP]
      ,[SP47585]
  FROM [danas].[dbo].[SC47587]
WHERE LEFT(LTRIM(RTRIM([DESCR])),13) = '3800024935466'

Сработало
38 Jaap Vduul
 
01.12.14
18:52
(32)
Визуально строки
'1234567890'
и
'1234567890' + char(10)
выглядят одинаково.
Преобразование к varbinary показывает нам коды отдельных символов - среди них не должно быть, например, 0D, 0A
Коды цифровых символов с 30 до 39.
39 Ёпрст
 
01.12.14
18:55
(37) ну давай, огласи результат этого:

SELECT *
  FROM [danas].[dbo].[SC47587]
WHERE DESCR like '%3800024935466%'
40 Ёпрст
 
01.12.14
18:56
и потом не говори сказки, что лайк у тебя не работает
41 Corvax46
 
01.12.14
19:09
(38) спасибо, сейчас гляну
42 Corvax46
 
01.12.14
19:15
(38) большое спасибо.... 0D и 0A присутствуют...
43 Жан Пердежон
 
01.12.14
19:24
Непечатаемые символы! Кто бы мог подумать...
44 trad
 
01.12.14
20:17
(42) при этом like (39) должен работать
45 Corvax46
 
02.12.14
09:41
(44) Спасибо, работает.
46 DrZombi
 
гуру
03.12.14
06:48
(0) Пробелы есть двух видов, по году 32 и по коду 160

http://easywebscripts.net/html/ascii.php

Если ты этого не видишь, то не значит, что его там нет ;)
47 DrZombi
 
гуру
03.12.14
06:48
+(46) году  - Коду