如何检查值是否是SQLite中的数字

Chi*_*hin 9 sql sqlite

我有一个包含数字和其他字符串值的列(如"?","???"等)

是否可以在SQLite中的where子句中添加"is number"条件?就像是:

select * from mytable where isnumber(mycolumn)
Run Code Online (Sandbox Code Playgroud)

Vam*_*ala 10

文档中,

typeof(X)函数返回一个字符串,该字符串指示表达式X的数据类型:"null","integer","real","text"或"blob".

您可以使用 where typeof(mycolumn) = "integer"

  • 如果列是TEXT类型,仍然可以返回"text",即使文本代表一个数字.参见[sql fiddle](http://sqlfiddle.com/#!5/16cc5/2/0). (6认同)

zed*_*xus 7

您也可以尝试这样的操作:

select * from mytable where printf("%d", field1) = field1;
Run Code Online (Sandbox Code Playgroud)

如果您的列是文本,并且包含数字和字符串,则这在提取整数数据时可能会有所帮助。

例:

CREATE TABLE mytable (field1 text);
insert into mytable values (1);
insert into mytable values ('a');

select * from mytable where printf("%d", field1) = field1;
field1
----------
1
Run Code Online (Sandbox Code Playgroud)


Mey*_*ini 7

SELECT * 
FROM mytable
WHERE columnNumeric  GLOB '*[0-9]*'
Run Code Online (Sandbox Code Playgroud)


Ric*_*lly 6

select * from mytable where abs(mycolumn) <> 0.0 or mycolumn = '0'
Run Code Online (Sandbox Code Playgroud)

http://sqlfiddle.com/#!5/f1081/2

基于这个答案


Oli*_*bes 6

要测试该列是否包含一个没有其他字母数字字符的整数,请使用:

NOT myColumn GLOB '*[^0-9]*' AND myColumn LIKE '_%'
Run Code Online (Sandbox Code Playgroud)

即,我们测试该列是否包含除数字以外的任何内容并反转结果。此外,我们测试它是否包含至少一个字符。

请注意,GLOB '*[0-9]*'还会发现嵌套在其他字符之间的数字。该函数typeof()将为'text'键入为 TEXT 的列返回,即使该文本表示一个数字。正如@rayzinnz 提到的,该abs()功能也不可靠。