Задача, которая встала передо мной на этот раз — немного необычна.
Требуется: достать из таблицы БД postgresql все уникальные первые символы. Алфавитный справочник составляю.
Проблема: postgres работает в режиме sql-ascii, символы могут занимать разное число байт.
Проблема2: postgres не имеет функции конвертации символов, а substr работает с байтами.
Решение:
SELECT DISTINCT
CASE
when ascii(substr(word,1,1))<192 then substr(word,1,1)
when ascii(substr(word,1,1))<224 then substr(word,1,2)
when ascii(substr(word,1,1))<240 then substr(word,1,3)
when ascii(substr(word,1,1))<248 then substr(word,1,4)
when ascii(substr(word,1,1))<252 then substr(word,1,5)
else substr(word,1,6)
END as letter
FROM table;
Требуется: достать из таблицы БД postgresql все уникальные первые символы. Алфавитный справочник составляю.
Проблема: postgres работает в режиме sql-ascii, символы могут занимать разное число байт.
Проблема2: postgres не имеет функции конвертации символов, а substr работает с байтами.
Решение:
SELECT DISTINCT
CASE
when ascii(substr(word,1,1))<192 then substr(word,1,1)
when ascii(substr(word,1,1))<224 then substr(word,1,2)
when ascii(substr(word,1,1))<240 then substr(word,1,3)
when ascii(substr(word,1,1))<248 then substr(word,1,4)
when ascii(substr(word,1,1))<252 then substr(word,1,5)
else substr(word,1,6)
END as letter
FROM table;
Comments
Странная, однако, задача.
UnicodeEncodeError at /comments/postfree/ ‘ascii’ codec can’t encode characters in position 0-7: ordinal not in range(128) =)
пофиксал баги!
Проблема — у тебя кривой хостинг который не дает тебе свой кластер Postgres с нормальной кодировкой. Решение: не экономить на спичках.
Julik, ты немножко неправ. У меня не кривой хостинг, а мне никто не объяснил, что собственно это sql-ascii означает, и чем оно не Unicode. А постгрес создал по умолчанию базу в sql-ascii. Я вообще сначала думал, что это кодировка для sql-команд и названий. P.S. Вот блин гуру уникодовый нашелся… ;)
Reply to «Как достать первые символы из utf8-таблицы»