小编use*_*734的帖子

SQLite,检查TEXT字段中是否有任何字母字符

好的,所以我有一个巨大的条目列表,并在其中一个列中(为简单起见,我们称之为num,这是一个数字,类似于123456780000(它们的长度和格式都相同),但有时会有类似的字段这个

12345678E000 
or 
12345678H000
Run Code Online (Sandbox Code Playgroud)

现在,我需要删除num列不完全是数字的所有行.num的类型是TEXT,而不是INTEGER.所以上面的例子应该删除,而不123456780000应该删除.

我尝试了两种解决方案,其中一种可以工作,但是不够优雅和杂乱,另一种根本不起作用.

我尝试的第一件事是

DELETE FROM MY_TABLE WHERE abs(num) == 0.0
Run Code Online (Sandbox Code Playgroud)

因为根据文档,如果给出TEXT值,abs(X)将返回0.0,并且不可转换为实数.所以我认为应该让所有"仅限数字"通过并删除带有字符的那些.但它没有做任何事情,它甚至不删除任一行.

我接下来要做的就是

DELETE FROM MY_TABLE WHERE num LIKE "%A%" OR "%B%" OR "%C%"
Run Code Online (Sandbox Code Playgroud)

这似乎工作,但数据库很大,我不知道哪些字符可以出现,虽然我可以只"%D%" OR "%E%" OR "%F%" OR ...用整个字母表,这感觉不雅和杂乱.我实际上想了解一下SQLite语言.

最后,我的问题是:如何以一种简单的方式解决这个问题?也许我的abs(X)解决方案有问题,或者有其他我不知道/想到的方法?

提前致谢.

编辑:根据我试过的评论SELECT abs(num) FROM MY_TABLE WHERE num like '%A%' ,它返回以下内容

12345678.0
Run Code Online (Sandbox Code Playgroud)

真奇怪.它似乎已经将字母出现的数字分开了.该文件声称如果它无法将其转换为数字,它将返回0.0.嗯..

sql sqlite sql-delete

6
推荐指数
1
解决办法
4273
查看次数

C++ STD find_last_of不工作?

我正在尝试编写一个函数来清除前面或后面的空格中的字符串.

所以基本上,如果你传递它的功能," \tHello, this is a test! \t"那么它必须返回"Hello, this is a test!".这是我的代码,但......

string clean_str(string str)
{
    const string alphabet("abcdefghijklmnopqrstuvwxyz1234567890åäö-");

    size_t first = str.find_first_of(alphabet);
    size_t last = str.find_last_of(alphabet);
    return str.substr(first, last);
}

int _tmain(int argc, _TCHAR* argv[])
{
    string s("         test 123-4    ");
    cout << "[" << clean_str(s) << "]";
    Sleep(INFINITE);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它回来了

// s == "test 123-4    "
Run Code Online (Sandbox Code Playgroud)

哪个错了.无论如何我决定选择Boost,但我仍然想知道为什么这不起作用.

谢谢.

c++ string std

2
推荐指数
1
解决办法
5054
查看次数

标签 统计

c++ ×1

sql ×1

sql-delete ×1

sqlite ×1

std ×1

string ×1