【发布时间】:2012-07-22 23:17:12
【问题描述】:
在 sqlite 中是否有任何解决方法可以弥补“char()”和“ascii()”函数的缺失?
例如:
char(97) => 'a'
ascii('a') => 97
【问题讨论】:
-
好吧,SQLite 并不是真正用于在插入数据后执行大量处理,那么为什么不在调用代码中进行这种计算呢? (在 C、C#、Java、C++ 和许多其他语言中,这非常容易)。
在 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
【讨论】:
实现在 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 的十六进制表示。
【讨论】: