SQLite char, функция ascii

есть ли какая-либо работа в sqlite, чтобы покрыть отсутствие функции "char()" и "ascii ()"?

например:

char(97) => 'a'
ascii('a') => 97

7 ответов


Я полагаю, если бы вы действительно хотели, вы могли бы создать таблицу значений "ASCII Table" с и ASCIICODE столбец и заполните его таблицей ASCII. Тогда ваши поиски могут быть выполнены в запросы / подзапросы:

SELECT ASCIICHAR FROM ASCIITABLE WHERE ASCIICODE = 97;

на самом деле, комментарий Ричарда Дж. Росса III касается денег - если вы используете SQLite, вы, вероятно, получаете доступ к нему через свой вызывающий код, не может ли вычисление быть сделано там?


Я знаю, что это слишком поздно, но:

SELECT unicode('a') --ascii('a')
SELECT char(97)     --char(97)

надеюсь, это поможет:)


С момента написания этого вопроса SQLite, очевидно, добавил CHAR() функция:

SELECT CHAR(97) -- Result is 'a'

тем не менее, ближе всего я получил в другом направлении с :

SELECT HEX('a') -- Result is 61 (hexadecimal, is equal to 97 decimal)

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


хотя преобразование маловероятно, sqlite распознает ASCII в этом запросе:

select * from segments where substr(name, 1, 1) < 'A' or substr(name, 1, 1) > 'Z' and substr(name, 1, 1) < 'a';

возможные результаты: 0-9 и все ASCII


было бы тривиально реализовать пользовательские функции sqlite3 ascii() и char (), которые выполняют преобразования в C или через другую языковую оболочку, поддерживающую пользовательские функции sqlite3 (например, в python).

http://www.sqlite.org/c3ref/create_function.html
https://docs.python.org/2/library/sqlite3.html


вы можете реализовать свою собственную версию ascii на основе библиотеки расширений sqlite, которая находится на этом сайте: http://sqlite.1065341.n5.nabble.com/Extension-functions-for-SQLite-in-C-for-free-td18942.html

Я изменил этот код, чтобы добавить функции, не конкретно ваши. Это должно быть довольно просто.


для более старых версий используйте cast(X'61' в качестве текста) вместо char (97). 61-шестнадцатеричное prepresentation из 97.