SQLITE从文本字段中仅选择数字值

时间:2019-04-01 15:22:17

标签: vb.net sqlite select

在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中不存在该信息。

谢谢

2 个答案:

答案 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