|
Сравнение строк в 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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |