在VB .net中,我想运行一个sqlite select语句以仅从包含数字和字母的文本字段(a4)中获取数字值。
我的sqlite文本a4字段数据包含这样的数据:
28 days
1966
the 100 years war
In希望能够获取
28
1966
100
sqlite a4字段具有文本数据类型
这是我尝试过的
SELECT a4 from data where CAST(a4 AS INTEGER) GLOB '[0-9]'
SELECT a4 FROM data WHERE a4 REGEXP '[0-9]'
我已经搜索了答案,但是只找到使用ISNUMERIC的MS SQL答案,而SQLITE中不存在该信息。
谢谢
答案 0 :(得分:1)
不是在数据库中完成的,而是在客户端代码中完成的。
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim strings() As String = {"28 days", "1966", "the 100 years war"}
Dim numbers As New List(Of String)
For Each s In strings
Dim num As String = ""
For Each c As Char In s
If Char.IsNumber(c) Then
num &= c
End If
Next
numbers.Add(num)
Next
For Each num In numbers
Debug.Print(num)
Next
'28
'1966
'100
End Sub
答案 1 :(得分:0)
您可以在SQLite3的SQL中执行此操作:
SELECT ROUND(a4) from data WHERE NOT ROUND(a4) = 0;
这是因为应用于ROUND()函数的非数字值导致值为0。例如:
sqlite> select round('hello');
round('hello')
--------------
0.0
..而存储为文本的数字值变成数字:
sqlite> select round('1234');
round('1234')
-------------
1234.0
N.B。此解决方案有一个局限性,如果数字值也是'0'或四舍五入为0.0,例如文本值'0.1'。如果文字以数字开头但包含其他字符,例如
,也会产生误报sqlite> select round('1234Hello');
round('1234Hello')
------------------
1234.0