【问题标题】:sqlite char, ascii functionsqlite char,ascii 函数
【发布时间】:2012-07-22 23:17:12
【问题描述】:

在 sqlite 中是否有任何解决方法可以弥补“char()”和“ascii()”函数的缺失?

例如:

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

【问题讨论】:

  • 好吧,SQLite 并不是真正用于在插入数据后执行大量处理,那么为什么不在调用代码中进行这种计算呢? (在 C、C#、Java、C++ 和许多其他语言中,这非常容易)。

标签: sql sqlite


【解决方案1】:

我知道这为时已晚,但是:

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

我希望这会有所帮助:)

【讨论】:

  • 这应该是答案。它最直接地解决了OP的问题。还有我的!
【解决方案2】:

从写这个问题开始,SQLite 显然增加了一个CHAR() 函数:

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

但是,我在另一个方向上最接近的是 HEX() 函数:

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

获得一个小数 ASCII 字符值似乎需要一些复杂的工作......

【讨论】:

  • 在哪个版本的SQLite中添加了?
【解决方案3】:

我想,如果你真的想的话,你可以创建一个包含 ASCIICHAR 列和 ASCIICODE 列的值的“ASCII 表”表,然后用 ASCII 表填充它。然后您的查找可以在查询/子查询中执行:

SELECT ASCIICHAR FROM ASCIITABLE WHERE ASCIICODE = 97;

真的,Richard J. Ross III 的评论是关于钱的 - 如果您使用 SQLite,您可能正在通过您的调用代码访问它,计算不能在那里完成吗?

【讨论】:

    【解决方案4】:

    虽然转换的可能性不大,但 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

    【讨论】:

      【解决方案5】:

      实现在 C 中执行转换的 sqlite3 用户函数 ascii() 和 char() 或通过支持 sqlite3 用户函数(例如在 python 中)的另一种语言包装器将是微不足道的。

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

      【讨论】:

        【解决方案6】:

        您可以基于此站点上的 sqlite 扩展库实现您自己的 ascii 版本:http://sqlite.1065341.n5.nabble.com/Extension-functions-for-SQLite-in-C-for-free-td18942.html

        我已修改此代码以添加功能,但不是专门针对您的。它应该很简单。

        【讨论】:

          【解决方案7】:

          对于旧版本,使用 cast(X'61' as text) 而不是 char(97)。 61 是 97 的十六进制表示。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-05
            • 1970-01-01
            • 2014-12-19
            • 2013-11-20
            • 2014-10-10
            • 2011-04-14
            相关资源
            最近更新 更多