SQLite - 反向字符串函数

时间:2011-10-19 19:19:37

标签: sqlite

在SQLite中是否有用于反转字符串的函数?我无法在文档中找到任何内容。

谢谢!

5 个答案:

答案 0 :(得分:9)

没有内置功能。您可以添加自定义函数,例如Python中的示例:

import sqlite3
conn = sqlite3.connect("")

conn.create_function("strrev", 1, lambda s: s[::-1])

cur = conn.cursor()
cur.execute(r''' SELECT strrev('hello, world') ''')
print(cur.fetchone()[0]) #dlrow ,olleh

答案 1 :(得分:5)

使用公用表表达式可以在SQLite中反转字符串。

WITH reverse(i, c) AS (
    values(-1, '')
    UNION ALL SELECT i-1, substr('dlrow olleh', i, 1) AS r FROM reverse
    WHERE r!=''
) SELECT group_concat(c, '') AS reversed FROM reverse;

返回hello world

答案 2 :(得分:1)

我解决了存储单词反转的问题,这是我通过这个PHP脚本获得的:

class MyDB extends SQLite3
{
        function __construct()
        {
                $dbFile = __DIR__ . '/Dictionary.sqlite';
                $this->open($dbFile);
        }            
}

$db = new MyDB();

$db->createFunction('rev', 'strrev', 1);
$db->exec('UPDATE dict_en SET word_rev = rev(word)');

echo "done";

答案 3 :(得分:0)

Hello MartyIX

是的,Sqlite3有一个可以用来反转字符串的函数。

Sqlite中的反向字符串

条件

  1. 你必须知道字符串的长度。
  2. 如果要反转列中的所有字符串,则所有字符串必须具有相同的长度。
  3. 实施例

    想象一下你有一个名为 myTable 的表就像这样。

    _id |   myField
    --------------------
    1   |   08641944
    2   |   08950407
    3   |   00250898
    4   |   00498293
    5   |   04502851
    6   |   03146310
    7   |   03146310
    8   |   03146310
    9   |   03146310
    

    在这种情况下, myField 列包含8个字符的字符串。

    查询

    SELECT myField,
        SUBSTR(myField,-1,1)||
        SUBSTR(myField,-2,1)||
        SUBSTR(myField,-3,1)||
        SUBSTR(myField,-4,1)||
        SUBSTR(myField,-5,1)||
        SUBSTR(myField,-6,1)||
        SUBSTR(myField,-7,1)||
        SUBSTR(myField,-8,1) 'reversed' 
    FROM myTable;
    

    结果

    myField     |    reversed
    -------------------------
    08641944    |    44914680
    08950407    |    70405980
    00250898    |    89805200
    00498293    |    39289400
    04502851    |    15820540
    03146310    |    01364130
    03146310    |    01364130
    03146310    |    01364130
    03146310    |    01364130  
    

    说明

    负整数,例如SUBSTR中的 -1 (myField, -1 ,1),
    告诉Sqlite从字符串中最右边的字符开始。

    正整数,例如SUBSTR中的 1 (myField,-1, 1 ),
    告诉Sqlite只选一个字符。

    ||,例如SUBSTR(MyField的,-1,1)||
    调用 group_concat(X)函数。

    '颠倒',在SUBSTR(myField,-8,1)'颠倒'
    告诉Sqlite将反向字符串放在标有颠倒的新列中。

    上面的 SELECT 语句通常会放在内部 CREATE VIEW AS 语句。

    实施例

    创建视图

    CREATE VIEW reversed AS
        SELECT myField,
            SUBSTR(myField,-1,1)||
            SUBSTR(myField,-2,1)||
            SUBSTR(myField,-3,1)||
            SUBSTR(myField,-4,1)||
            SUBSTR(myField,-5,1)||
            SUBSTR(myField,-6,1)||
            SUBSTR(myField,-7,1)||
            SUBSTR(myField,-8,1) 'reversed' 
        FROM myTable;
    

    更新

    如果字符串长度为1000个字符,如hamstergene所示,则必须使用脚本语言来创建执行以下两个操作的函数。

    1. 查询字段以获取字符串长度。
    2. 根据计数以编程方式创建SELECT语句。
    3. 也许hamstergene可以帮助你。

答案 4 :(得分:0)

正如其他人已经解释的那样,第一个参数为负的SUBSTR返回反转文本。可以将其与LENGTH一起使用,而不必依赖于知道字段的实际长度。所以:

SELECT SUBSTR(myfield , -LENGTH (myfield), LENGTH (myfield)) as inverted_myfield FROM [...]

这将返回 myfield ,但具有反向的字符串( inverted_myfield )。