sqlite 中是否有任何解决方法可以弥补“char()”和“ascii()”函数的缺失?
例如:
char(97) => 'a'
ascii('a') => 97
我知道这为时已晚,但是:
SELECT unicode('a') --ascii('a')
SELECT char(97) --char(97)
我希望这有帮助 :)
从写这个问题开始,SQLite 显然增加了一个CHAR()
功能:
SELECT CHAR(97) -- Result is 'a'
但是,我在另一个方向上最接近的是HEX()
函数:
SELECT HEX('a') -- Result is 61 (hexadecimal, is equal to 97 decimal)
获得十进制ASCII
字符值似乎需要一些复杂的工作......
我想,如果你真的想要,你可以创建一个包含一ASCIICHAR
列和一ASCIICODE
列的值的“ASCII 表”表,并用 ASCII 表填充它。然后您的查找可以在查询/子查询中执行:
SELECT ASCIICHAR FROM ASCIITABLE WHERE ASCIICODE = 97;
确实,Richard J. Ross III 的评论是关于钱的——如果您使用 SQLite,您可能正在通过您的调用代码访问它,计算不能在那里完成吗?
虽然转换不太可能,但 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 < 'a'
实现在 C 中执行转换的 sqlite3 用户函数 ascii() 和 char() 或通过支持 sqlite3 用户函数(例如在 python 中)的另一种语言包装器将是微不足道的。
http://www.sqlite.org/c3ref/create_function.html
https://docs.python.org/2/library/sqlite3.html
您可以基于此站点上的 sqlite 扩展库实现您自己的 ascii 版本:http: //sqlite.1065341.n5.nabble.com/Extension-functions-for-SQLite-in-C-for-free- td18942.html
我已修改此代码以添加功能,但不是专门针对您的。它应该很简单。
对于旧版本,使用 cast(X'61' as text) 而不是 char(97)。61 是 97 的十六进制表示。