Имя: Пароль:
IT
 
Сравнение строк в SQL и "обычных" ЯП
0 Тролль главный
 
20.05.16
13:35
Что-то меня немного мучает отличия в правилах сравнения строк (==, !=, >, <) в SQL и "обычных" языках как Java, С#, Delphi и проч.

SQL считает выражения:
'строка' = 'строка  ' - истинным
'строка' < 'строка  ' - ложным

а "обычные" ЯП с точностью до наоборот

Вот как научить SQL вести себя аналогично другим ЯП?
1 ДенисЧ
 
20.05.16
13:36
RTrim()
Дарю
2 Dotoshin
 
20.05.16
13:38
(1) А если будет ' строка' ?
3 ДенисЧ
 
20.05.16
13:39
(2) За отдельную плату - продам LTrim()
4 Тролль главный
 
20.05.16
13:40
(1) как мне это поможет?
(2) начальные пробелы учитываются
5 Dotoshin
 
20.05.16
13:40
(3) Сколько просишь?
6 orefkov
 
20.05.16
13:40
(0)
В нормальных dbms есть такое понятие, как collation order - способ сравнения значений в колонке.
7 ДенисЧ
 
20.05.16
13:41
(5) У тебя столько не наберётся
(4) сравнивай тримнутые сроки
8 vde69
 
20.05.16
13:42
можно использовать Like и всю мощь выражений...
9 Тролль главный
 
20.05.16
13:42
(6) это не про то
(7) я не хочу тримнутые, он и так их сравнивает как тримнутые
10 Тролль главный
 
20.05.16
13:42
(8) можно напороться на спецсимволы да и на больше/меньше не поможет
11 youalex
 
20.05.16
13:44
(2) ' строка' <> 'строка'
12 orefkov
 
20.05.16
13:45
+(9)
Как раз про то.
Например, в sqlite есть встроенные collation's - nocase, binary, rtrim. И можно записать выражение
select 'line'=='Line' collate 'nocase'
вернет 1.
select 'Line'=='Line '
вернёт 0.
select 'Line'=='Line ' collate 'rtrim'
вернёт 1
13 Dotoshin
 
20.05.16
13:49
(12) а в ms sql как? а в постгри?
14 orefkov
 
20.05.16
13:49
+(12)
Вот дляmssql нашёл пример с регистронезависимым сравнением
if 'www' Collate Cyrillic_General_CS_AS = 'WWW'
  select '111'
else
  select '222'

Кури, какие collation поддерживаются
15 Тролль главный
 
20.05.16
13:50
(12) спасибо, посмотрю что есть такого в Firebird
16 Жан Пердежон
 
20.05.16
13:50
17 Тролль главный
 
20.05.16
13:57
(14) походу sqlite только и обладает этим, ни в ms sql, ни в firebird такого нет
(16) и че? это я и так знал
18 orefkov
 
20.05.16
14:04
(17)
да, видимо так и есть. Покопался в collation у mssql - нет подходящей.
19 Тролль главный
 
20.05.16
14:15
есть решение

для равно/неравно:
where str1+"_"=str2+"_" --добавить любой значащий символ

для больше/меньше:
where (str1>str2) or ((str1=str2) and (str1+"_">str2+"_"))

но я не уверен, проверьте плиз
20 Тролль главный
 
20.05.16
14:24
+(19) с неравенством не прокатило, тампоходу как ни странно надо наоборот второе неравенство
21 Тролль главный
 
20.05.16
15:08
сортировка:

order by F1, F1||'_' desc
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс