Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SELECT DISTINCT с пробельными строками  [new]
drag79
Member

Откуда:
Сообщений: 14
Имеем в некоторой таблице в символьной колонке разные значения - NULL, пустая строка, один или несколько пробелов.
Каким то образом тестировщики добились, чтобы у них при запросе из такой таблицы с DISTINCT по данной колонке выдавались разные строки для пустых строк в колонке и с несколькими пробелами.
Написал такой запрос:
SELECT '|' + dist.[varchar] + '|'
FROM (select distinct [varchar] from [dbo].[Test1]) dist

У меня упорно не хотят появляться несколько строк, все строки ужимаются в одну, как будто:
'' = ' '
Как этого добиться?
28 дек 12, 12:16    [13699767]     Ответить | Цитировать Сообщить модератору
 Re: SELECT DISTINCT с пробельными строками  [new]
AnaceH
Member

Откуда:
Сообщений: 109
drag79,
например
with cte as (
select 'a' a, '' b
union all 
select 'a' a, ' ' b
union all 
select 'a' a, '  ' b
union all 
select 'a' a, '   ' b
union all 
select 'a' a, null b 
)

select  distinct a, b, datalength(b) from cte
28 дек 12, 12:40    [13699964]     Ответить | Цитировать Сообщить модератору
 Re: SELECT DISTINCT с пробельными строками  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> и с несколькими пробелами

точно только пробелами? есть еще и другие "невидимые" символы.
28 дек 12, 12:41    [13699969]     Ответить | Цитировать Сообщить модератору
 Re: SELECT DISTINCT с пробельными строками  [new]
invm
Member

Откуда: Москва
Сообщений: 9646
Покажите скрипт создания таблицы, тестовые данные и сам запрос.
А так, навскидку, -- set ansi_padding.
28 дек 12, 12:41    [13699975]     Ответить | Цитировать Сообщить модератору
 Re: SELECT DISTINCT с пробельными строками  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> А так, навскидку, -- set ansi_padding.

не должно бы.
set ansi_padding on
go
select distinct c
from (values(N' '), (N'  ')) t (c)
go
set ansi_padding off
go
select distinct c
from (values(N' '), (N'  ')) t (c)
go
set ansi_padding on
go
select distinct c
from (values(' '), ('  ')) t (c)
go
set ansi_padding off
go
select distinct c
from (values(' '), ('  ')) t (c)
go
28 дек 12, 12:49    [13700056]     Ответить | Цитировать Сообщить модератору
 Re: SELECT DISTINCT с пробельными строками  [new]
invm
Member

Откуда: Москва
Сообщений: 9646
daw,

Имелось в виду использование значения столбца в выражении.
28 дек 12, 13:09    [13700199]     Ответить | Цитировать Сообщить модератору
 Re: SELECT DISTINCT с пробельными строками  [new]
Гость333
Member

Откуда:
Сообщений: 3683
invm
А так, навскидку, -- set ansi_padding.

Эта опция не влияет на результаты сравнения строк. Если две строки отличаются только количеством конечных пробелов, то они равны — так определено в стандарте ANSI, так реализовано в SQL Server, никакие настройки на это не влияют.
28 дек 12, 13:12    [13700222]     Ответить | Цитировать Сообщить модератору
 Re: SELECT DISTINCT с пробельными строками  [new]
invm
Member

Откуда: Москва
Сообщений: 9646
Гость333,

13700199
28 дек 12, 13:15    [13700247]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить