Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 1,011

Отображаются лишние строки

16.08.2024, 10:20. Показов 917. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

В MS SQL
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--Исходные данные
CREATE TABLE myTempTable1  ([column1] VARCHAR(10), [column2] INTEGER, [column3] INTEGER);
INSERT INTO myTempTable1 VALUES ('aB', 1, 10),('ab', 1, 20),('cd', 2, 30),('cD', 2, 40);
 
--Создаем кросс таблицу
SELECT
    t1.[column1], t2.[column2]
INTO
    myTempTable2
FROM
    (SELECT DISTINCT [column1] FROM myTempTable1) t1
CROSS JOIN
    (SELECT DISTINCT [column2] FROM myTempTable1) t2
;
 
--Запрос
SELECT
    t2.[column1],
    t2.[column2],
    isnull(t1.[column3], 0) AS [column3]
FROM
    myTempTable2 t2
LEFT JOIN
    myTempTable1 t1
ON
    t2.[column1] = t1.[column1] AND t2.[column2] = t1.[column2]
ORDER BY
    t2.[column1],
    t2.[column2]
;

Результат
column1 column2 column3
aB 1 10
aB 1 20
aB 2 0
cd 1 0
cd 2 30
cd 2 40


В PostgreSQL
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
--Исходные данные
CREATE TEMPORARY TABLE myTempTable1  ("column1" VARCHAR(10), "column2" INTEGER, "column3" INTEGER);
INSERT INTO myTempTable1 VALUES ('aB', 1, 10),('ab', 1, 20),('cd', 2, 30),('cD', 2, 40);
 
-- Добавляем поле и назначаем по нему индекс
ALTER TABLE myTempTable1 ADD "hash" text;
UPDATE myTempTable1 SET "hash" = md5(LOWER(concat("column1","column2")));
CREATE INDEX myTempTable1_idx1 ON myTempTable1 USING btree ("hash");
 
--Создаем кросс таблицу
CREATE TEMPORARY TABLE myTempTable2 AS (
    SELECT
        t1."column1", t2."column2"
    FROM
        (SELECT DISTINCT "column1" FROM myTempTable1) t1
    CROSS JOIN
        (SELECT DISTINCT "column2" FROM myTempTable1) t2
);
 
-- Добавляем поле и назначаем по нему индекс
ALTER TABLE myTempTable2 ADD "hash" text;
UPDATE myTempTable2 SET "hash" = md5(LOWER(concat("column1","column2")));
CREATE INDEX myTempTable2_idx1 ON myTempTable2 USING btree ("hash");
 
--Запрос
SELECT
    t2."column1",
    t2."column2",
    COALESCE(t1."column3", 0) AS "column3"
FROM
    myTempTable2 t2
LEFT JOIN
    myTempTable1 t1
ON
    t2."hash" = t1."hash"
ORDER BY
    t2."column1",
    t2."column2"
;

Результат
column1 column2 column3
ab 1 20
ab 1 10
ab 2 0
aB 1 10
aB 1 20
aB 2 0
cd 1 0
cd 2 30
cd 2 40
cD 1 0
cD 2 30
cD 2 40

Как видим дублируются строки без учета регистра по полю "column1".

Обратите внимание, что для PostgreSQL для соединения таблиц создается поле "hash" дополнительно, который используется в индексе. Рабочая таблица большая и много полей для указания в ON.

Скажите, как можно исправить код, чтобы результат соответствовал как в MS SQL?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2024, 10:20
Ответы с готовыми решениями:

Не отображаются строки из которых вычитаются пустые строки
Есть бд Склада, в ней я создаю запрос на расчёт суммы списанного товара и суммы поступившего товара, расчёты все выводят...

Отображаются лишние символы при выводе массива символов
#include <iostream.h> #include <string.h> // для функций str* /////////////////////////////////////////////////////////// ...

LINQobj не могу понять, как убрать все лишние строки, кроме строки с наименьшим баллом
LinqObj52. Исходная последовательность содержит сведения о результатах сдачи учащимися ЕГЭ по математике, русскому языку и...

14
4 / 4 / 0
Регистрация: 13.08.2024
Сообщений: 9
16.08.2024, 11:44
Для имитации такого регистронезависимого поведения (какое я так понимаю используется по умолчанию в MS SQL) в Pg можно воспользоваться distinct on:
SQL
1
2
3
4
5
6
7
8
CREATE TEMPORARY TABLE myTempTable2 AS (
    SELECT
        t1."column1", t2."column2"
    FROM
        (SELECT DISTINCT ON(LOWER("column1")) "column1" FROM myTempTable1) t1
    CROSS JOIN
        (SELECT DISTINCT "column2" FROM myTempTable1) t2
);
1
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 1,011
16.08.2024, 11:48  [ТС]
Спасибо!
0
4 / 4 / 0
Регистрация: 13.08.2024
Сообщений: 9
16.08.2024, 12:05
Еще как варианты, можно установить расширение citext, что позволит поле сделать регистронезависимым (по сути тоже внутри как lower учитывает)

или же использовать collate, создав новый регистронезависимый и использовав его в запросе:

SQL
1
2
3
4
5
6
7
CREATE COLLATION case_insensitive (
  provider = 'icu',
  locale = '@colStrength=secondary',
  deterministic = FALSE
);
 
SELECT DISTINCT "column1" COLLATE "case_insensitive" FROM myTempTable1
1
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 1,011
20.08.2024, 16:35  [ТС]
Цитата Сообщение от o5a Посмотреть сообщение
SELECT DISTINCT ON(lower("column1")) "column1" FROM myTempTable1;[/SQL]
А как должен выглядеть код с использование ON, если там есть другие текстовые колонки, которые не надо использовать lower?

Пример
SQL
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TEMPORARY TABLE myTempTable1  ("column1" text, "column2" VARCHAR(255), "column3" VARCHAR(512));
INSERT INTO myTempTable1 VALUES
('Аааа', 'Ааааааааа', 'Ы'),('Ббб', 'Ааааааааа', 'ы'),('Ббб', 'Б ббббббб', 'ы'),('Ббб', 'Вввввввв: ввввв', 'ы');
 
SELECT DISTINCT ON
    (LOWER("column3")) "column3",
    "column1",
    "column2"
FROM 
    myTempTable1
WHERE
    LOWER("column3") = 'ы';
Результат
"column3""column1""column2"
Ы Аааа Ааааааааа

Надо так
"column1""column2""column3"
Аааа Ааааааааа Ы
Ббб Ааааааааа Ы
Ббб Б ббббббб Ы
Ббб Вввввввв: ввввв Ы

Добавлено через 1 час 15 минут
Цитата Сообщение от o5a Посмотреть сообщение
SQL
1
2
3
4
5
CREATE COLLATION case_insensitive (
  provider = 'icu',
  locale = '@colStrength=secondary',
  deterministic = FALSE
);
Создали collation и смотрим как в базе данных записалось
SQL
1
2
3
4
5
6
SELECT 
    "collname",  "collprovider", "colliculocale", "collisdeterministic" 
FROM
    pg_collation
WHERE
    "collname" = 'case_insensitive'
collnamecollprovidercolliculocalecollisdeterministic
case_insensitive i und-u-ks-level2 false

Почему в поле collprovider значение 'i', не 'icu'? А также почему в поле colliculocale значение 'und-u-ks-level2', а не '@colStrength=secondary'?

Хотелось запустить запрос поиска по соответствующим параметрам, чтобы лишние collation не создавать.
0
4 / 4 / 0
Регистрация: 13.08.2024
Сообщений: 9
20.08.2024, 17:01
Цитата Сообщение от MConst Посмотреть сообщение
А как должен выглядеть код...
А по какому принципу вы ожидаете в 3-й колонке увидеть только большие буквы Ы ? Ведь даже если хотите увидеть distinct по всем колонкам сразу, то в последующих записях везде маленькая 'ы' будет, т.к. там уже другие значения в 1 и 2 колонках (даже с учетом нижнего регистра). Если все-таки у вас ошибка в примере, и хотите просто видеть уникальные полные строки с учетом приведения к нижнему регистру всей строки, можно так:
SQL
1
2
3
4
5
6
SELECT DISTINCT ON (LOWER((r.*)::text))
    "column1",
    "column2",
    "column3"
FROM 
    myTempTable1 r
Т.е. строим уникальность по всем полям в нижнем регистре.

Добавлено через 4 минуты
Цитата Сообщение от MConst Посмотреть сообщение
Почему в поле collprovider значение 'i', не 'icu'? А также почему в поле colliculocale значение 'und-u-ks-level2', а не '@colStrength=secondary'?
Хотелось запустить запрос поиска по соответствующим параметрам, чтобы лишние collation не создавать.
'i' и есть 'icu'

По colliculocale возможно еще от версии Pg зависит, но '@colStrength=secondary' должно быть видно в поле collcollate например.
Вообще за подробностями по collate лучше почитайте офф. документацию, там разные нюансы.
0
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 1,011
20.08.2024, 17:04  [ТС]
Цитата Сообщение от o5a Посмотреть сообщение
Т.е. строим уникальность по всем полям в нижнем регистре.
Фишка в том, что для уникальности не нужно приводить все в нижний регистр. А для column3 нужно брать первый в списке как в коде ниже.
Цитата Сообщение от o5a Посмотреть сообщение
SELECT DISTINCT ON(lower("column1")) "column1" FROM myTempTable1;[/SQL]
0
4 / 4 / 0
Регистрация: 13.08.2024
Сообщений: 9
20.08.2024, 17:11
Цитата Сообщение от MConst Посмотреть сообщение
Фишка в том, что для уникальности не нужно приводить все в нижний регистр. А для column3 нужно брать первый в списке как в коде ниже.
А на каком основании будет браться именно только 1-е значение в 3-й колонке? Получается это уже не просто уникальность без учета регистра.

Если 3-я колонка какая-то особенная (по ней нужно просто брать без учета регистра, а по остальным нет), то тогда больше похоже, что хотите взять первые колонки отдельно и уже к ним сделать join по уникальным из 3-й колонки без учета регистра.

Вот такое например подпадет под ваш пример (где в 3-й только Ы)
SQL
1
2
3
SELECT *
FROM (SELECT "column1", "column2" FROM myTempTable1) a1
CROSS JOIN (SELECT DISTINCT ON (LOWER("column3")) "column3" FROM myTempTable1) a2
Но не зная логики, по какой вы решили именно так выводить, сложно сказать, чего хотите в реальности.
0
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 1,011
20.08.2024, 19:17  [ТС]
Цитата Сообщение от o5a Посмотреть сообщение
SQL
1
2
3
4
5
6
7
CREATE COLLATION case_insensitive (
  provider = 'icu',
  locale = '@colStrength=secondary',
  deterministic = FALSE
);
 
SELECT DISTINCT "column1" COLLATE "case_insensitive" FROM myTempTable1
Для другого компа, где версия PostgreSQL 11.15
SQL
1
2
3
4
CREATE COLLATION case_insensitive (
  provider = 'icu',
  locale = '@colStrength=secondary'
);
Выдает ошибку ICU is not supported in this build.

Возможно ли другие провайдеры указать, например, 'd' или 'с' чтобы сохранялась логика решения данной задачи с регистром? Или только 'icu'?

Добавлено через 10 минут
Цитата Сообщение от o5a Посмотреть сообщение
А на каком основании будет браться именно только 1-е значение в 3-й колонке? Получается это уже не просто уникальность без учета регистра.

Если 3-я колонка какая-то особенная (по ней нужно просто брать без учета регистра, а по остальным нет), то тогда больше похоже, что хотите взять первые колонки отдельно и уже к ним сделать join по уникальным из 3-й колонки без учета регистра.
Пример
'Аааа' и 'аааа' -> Берется один из них
'ББбб' и 'Бббб' -> Берется один из них
'СссС' и 'Сссс' -> Берется один из них
Цитата Сообщение от o5a Посмотреть сообщение
Но не зная логики, по какой вы решили именно так выводить, сложно сказать, чего хотите в реальности.
Проще было бы поле Column3 в нижний регистр, но на практике так не нужно делать, так как данное поле визуализирутся в дашбордах. Поэтому берется один из дубликатов с учетом регистра и при этом максимально сохраняются заглавные буквы.

Добавлено через 1 час 46 минут
Цитата Сообщение от o5a Посмотреть сообщение
Вот такое например подпадет под ваш пример (где в 3-й только Ы)
SQL
1
2
3
SELECT *
FROM (SELECT "column1", "column2" FROM myTempTable1) a1
CROSS JOIN (SELECT DISTINCT ON (LOWER("column3")) "column3" FROM myTempTable1) a2
Надо без cross.
0
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 1,011
21.08.2024, 08:24  [ТС]
Цитата Сообщение от MConst Посмотреть сообщение
Для другого компа, где версия PostgreSQL 11.15
SQL
1
2
3
4
CREATE COLLATION case_insensitive (
  provider = 'icu',
  locale = '@colStrength=secondary'
);
Выдает ошибку ICU is not supported in this build.

Возможно ли другие провайдеры указать, например, 'd' или 'с' чтобы сохранялась логика решения данной задачи с регистром? Или только 'icu'?
Для версии 11 не поддерживается 'icu'.

Добавлено через 13 минут
Если не использовать distinct on, то как вариант использовать citext для нужного поля.
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
--Исходные данные
CREATE TEMPORARY TABLE myTempTable1  ("column1" VARCHAR(10), "column2" INTEGER, "column3" INTEGER);
INSERT INTO myTempTable1 VALUES ('aB', 1, 10),('ab', 1, 20),('cd', 2, 30),('cD', 2, 40);
 
--Изменяем тип данных
ALTER TABLE myTempTable1 ALTER COLUMN column1 SET DATA TYPE citext;
 
--Добавляем поле и назначаем по нему индекс
ALTER TABLE myTempTable1 ADD "hash" text;
UPDATE myTempTable1 SET "hash" = md5(LOWER(concat("column1","column2")));
CREATE INDEX myTempTable1_idx1 ON myTempTable1 USING btree ("hash");
 
--Создаем кросс таблицу
DROP TABLE IF EXISTS myTempTable2;
CREATE TEMPORARY TABLE myTempTable2 AS (
    SELECT
        t1."column1", t2."column2"
    FROM
        (SELECT DISTINCT "column1" FROM myTempTable1) t1
    CROSS JOIN
        (SELECT DISTINCT "column2" FROM myTempTable1) t2
);
 
--Изменяем тип данных
ALTER TABLE myTempTable2 ALTER COLUMN column1 SET DATA TYPE citext;
 
--Добавляем поле и назначаем по нему индекс
ALTER TABLE myTempTable2 ADD "hash" text;
UPDATE myTempTable2 SET "hash" = md5(LOWER(concat("column1","column2")));
CREATE INDEX myTempTable2_idx1 ON myTempTable2 USING btree ("hash");
 
--Запрос
SELECT
    t2."column1",
    t2."column2",
    COALESCE(t1."column3", 0) AS "column3"
FROM
    myTempTable2 t2
LEFT JOIN
    myTempTable1 t1
ON
    t2."hash" = t1."hash"
ORDER BY
    t2."column1",
    t2."column2"
;

Скажите, вообще без разницы, если citext задавать до или после индекса?


SQL
1
ALTER TABLE myTempTable2 ALTER COLUMN column1 SET DATA TYPE citext;
Это запись необязательная же, верно?


Добавлено через 5 минут
А если так написать
SQL
1
2
3
4
5
6
7
CREATE TEMPORARY TABLE myTempTable1  ("column1" text, "column2" VARCHAR(255), "column3" VARCHAR(512));
INSERT INTO myTempTable1 VALUES
('Аааа', 'Ааааааааа', 'Ы'),('Ббб', 'Ааааааааа', 'ы'),('Ббб', 'Б ббббббб', 'ы'),('Ббб', 'Вввввввв: ввввв', 'ы');
 
ALTER TABLE myTempTable1  ALTER COLUMN "column3" SET DATA TYPE citext;
 
SELECT DISTINCT "column1", "column2", "column3" FROM myTempTable1;
Возвращает
column1column2column3
Ббб Ааааааааа ы
Ббб Вввввввв: ввввв ы
Аааа Ааааааааа Ы
Ббб Б ббббббб ы

А надо
column1column2column3
Ббб Ааааааааа Ы
Ббб Вввввввв: ввввв Ы
Аааа Ааааааааа Ы
Ббб Б ббббббб Ы
0
4 / 4 / 0
Регистрация: 13.08.2024
Сообщений: 9
21.08.2024, 09:01
Вам не нужны все эти 3 способа одновременно, они по сути идентичны, выберите просто какой больше нравится или подходит для вашей системы или более удобен, его и используйте:
1) lower(...) напрямую делает, что ожидается
2) collate данного вида для сортировки/группировки строк тоже по сути использует регистронезависимые сравнения
3) citext сам по себе делает тип указанного поля регистронезависимым, поэтому сортировки/группировки по этому полю тоже будут регистронезависимыми.

Добавлено через 15 минут
Цитата Сообщение от MConst Посмотреть сообщение
ALTER TABLE myTempTable2 ALTER COLUMN column1 SET DATA TYPE citext;
Это запись необязательная же, верно?
Смотря чего хотите добиться. Если в самой таблице использовать регистронезависимый тип (citext), то можете так явно его писать, или же заведомо при создании таблицы указывать тип не строковый, а именно citext
SQL
1
CREATE TEMPORARY TABLE myTempTable1  ("column1" citext, "column2" VARCHAR(255), "column3" VARCHAR(512));
Или же динамически в запросе к нему приводить (когда оно изначально varchar/text):
SQL
1
2
3
4
5
CREATE TEMPORARY TABLE myTempTable1  ("column1" text, "column2" VARCHAR(255), "column3" VARCHAR(512));
INSERT INTO myTempTable1 VALUES
('Аааа', 'Ааааааааа', 'Ы'),('Ббб', 'Ааааааааа', 'ы'),('Ббб', 'Б ббббббб', 'ы'),('Ббб', 'Вввввввв: ввввв', 'ы');
 
SELECT DISTINCT "column3"::citext FROM myTempTable1
выведет уникальные без учета регистра

---
По сути не так важно, какой из методов будете использовать, в основе его одинаковая система регистронезависимого учета данных. Вам нужно только определиться, по какой логике вы хотите выбирать эти регистронезависимые данные.

В вашем примере с "Ббб Ааааааааа Ы" и т.п. у вас column3 живет своей жизнью: первые 2 колонки выводятся как уникальные, а 3-я получается не связана с ними, а просто берет регистронезависимое значение чисто из колонки, никак не связаное, с остальными полями этой же строки. Поэтому и предложил вариант разделить их отдельно первые колонки и 3-ю колонку. Но и cross join вам не подходит. Из приведенного примера этого не видно.
Расширьте тогда свой пример с "Аааааа и т.п.", где у 3-й колонки было бы что-то кроме ы и покажите, чего ожидаете в том
случае.
Например,
SQL
1
2
3
CREATE TEMPORARY TABLE myTempTable1  ("column1" text, "column2" VARCHAR(255), "column3" VARCHAR(512));
INSERT INTO myTempTable1 VALUES
('Аааа', 'Ааааааааа', 'Ы'),('Ббб', 'Ааааааааа', 'ы'),('Ббб', 'Б ббббббб', 'ы'),('Ббб', 'Вввввввв: ввввв', 'ы'),('Аааа', 'Ааааааааа', 'м'),('Аааа', 'Ааааааааа', 'М'),('Ббб', 'Ааааааааа', 'М');
0
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 1,011
21.08.2024, 14:40  [ТС]
Такое ощущение как будто citext влияет на производительность, если таблица большая и на основе нее строятся другие таблицы.

Добавлено через 4 часа 29 минут
Цитата Сообщение от o5a Посмотреть сообщение
Вам не нужны все эти 3 способа одновременно, они по сути идентичны, выберите просто какой больше нравится или подходит для вашей системы или более удобен, его и используйте:
1) lower(...) напрямую делает, что ожидается
Для данной задачи не подходит.
2) collate данного вида для сортировки/группировки строк тоже по сути использует регистронезависимые сравнения
Цитата Сообщение от o5a Посмотреть сообщение
SQL
1
2
3
4
5
6
7
CREATE COLLATION case_insensitive (
  provider = 'icu',
  locale = '@colStrength=secondary',
  deterministic = FALSE
);
 
SELECT DISTINCT "column1" COLLATE "case_insensitive" FROM myTempTable1
Для версии 11 не поддерживается 'icu'.
3) citext сам по себе делает тип указанного поля регистронезависимым, поэтому сортировки/группировки по этому полю тоже будут регистронезависимыми.
До этого рабочая процедура выполнялась 30 минут, а после применения citext -выполняется больше 5 часов. Как понимаю, ускорить не получиться. Формируемая большая таблица в процедуре и на основе ее формируются другие таблицы с индексами.
0
912 / 286 / 57
Регистрация: 01.06.2023
Сообщений: 807
21.08.2024, 16:16
Цитата Сообщение от MConst Посмотреть сообщение
Сообщение от o5a
Вам не нужны все эти 3 способа одновременно, они по сути идентичны, выберите просто какой больше нравится или подходит для вашей системы или более удобен, его и используйте:
1) lower(...) напрямую делает, что ожидается
Для данной задачи не подходит.
Группируйте по lower(...) + добавьте еще одну таблицу которая по ключу вернет текст в нормальном регистре. А в идеале в мега таблицу сразу вводите числовой код из таблицы справочника (декомпозиция ... нормализация и всякое такое из учебников по архитектуре БД)
0
4 / 4 / 0
Регистрация: 13.08.2024
Сообщений: 9
21.08.2024, 17:21
Цитата Сообщение от MConst Посмотреть сообщение
Для данной задачи не подходит.
distinct on (lower())
в вашем случае по сути то же самое, что использование collate или citext - выводить уникальные значения без учета регистра.

Другое дело, как именно применить ее к вашим данным.
Я приводил рабочий пример решения для того примера, что изначально приводили.
Но в реальности у вас что-то другое, поэтому нужно по-другому скомпоновать данные. А как именно, или сами придумайте, или тогда хотя бы ответьте, что вы ожидаете увидеть от более расширенного вашего же примера, где в 3-й колонке будут разные символы, а не просто разные регистры:
Цитата Сообщение от o5a Посмотреть сообщение
CREATE TEMPORARY TABLE myTempTable1  ("column1" text, "column2" VARCHAR(255), "column3" VARCHAR(512));
INSERT INTO myTempTable1 VALUES
('Аааа', 'Ааааааааа', 'Ы'),('Ббб', 'Ааааааааа', 'ы'),('Ббб', 'Б ббббббб', 'ы'),('Ббб', 'Вввввввв: ввввв', 'ы'),('Аааа', 'Ааааааааа', 'м'),('Аааа', 'Ааааааааа', 'М'),('Ббб', 'Ааааааааа', 'М');
От этого уже и будет зависеть запрос.
0
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 1,011
30.08.2024, 08:36  [ТС]
Цитата Сообщение от o5a Посмотреть сообщение
SQL
1
2
3
4
5
6
7
CREATE COLLATION case_insensitive (
  provider = 'icu',
  locale = '@colStrength=secondary',
  deterministic = FALSE
);
 
SELECT DISTINCT "column1" COLLATE "case_insensitive" FROM myTempTable1
Обратил внимание, что в версии 13 если после collate запись case_insensitive не добавлять двойные кавычки, то работает. А если добавить, то выдает ошибку "case_insensitive" for encoding "UTF8" does not exists.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.08.2024, 08:36
Помогаю со студенческими работами здесь

Лишние строки
Добрый день! Я использую программу "1C: Предприятие 7.7", конфигуация "1С-рарус, Альфа-авто". Изменила в конфигураторе форму...

Убрать лишние строки
Но появился еще один вопрос, если я вам еще не надоел :) Вот формула, которую я написал для подсчёта заявок по n-ному кол-ву критериев...

Как удалить лишние строки ?
У приятеля Win 7... Он попросил восстановить систему после аварии, что я и сделал - через загрузочную флешку с форматированием активного...

Удалить из строки лишние пробелы
помогите решить задачу

Удалить из строки лишние пробелы
Добрый день. Задача: необходимо вырезать из строки все лишние пробелы два и более подряд. Также удалить лишние пробелы в начале и конце...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru