【问题标题】:SQLITE select only numeric values from text fieldSQLITE 仅从文本字段中选择数值
【发布时间】:2019-08-24 20:50:02
【问题描述】:

在 VB .net 中,我想运行一个 sqlite 选择语句,以仅从包含数字和字母的文本字段 (a4) 中获取数值。

我的 sqlite 文本 a4 字段数据包含这样的数据:

  28 days
  1966
  the 100 years war

在希望能够获取

  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 中不存在该答案。

谢谢

【问题讨论】:

  • 也许在接近但没有雪茄类别:trim(lower(info),"abcdefghijklmnopqrstuvwxyz ")。我想你也可以包含特殊字符。但它不适用于2 plus 2 is 4

标签: vb.net sqlite select


【解决方案1】:

您可以在 SQL 中为 SQLite3 执行此操作:

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

注意此解决方案的一个限制是,如果数值也是“0”或四舍五入为 0.0,例如文本值“0.1”。如果文本以数字开头但包含其他字符,例如

,它也会给出误报
sqlite> select round('1234Hello');
round('1234Hello')
------------------
1234.0

【讨论】:

    【解决方案2】:

    不是在数据库中而是在客户端代码中完成。

    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
    

    【讨论】:

    • 谢谢玛丽,如果我无法使用 sql 实现类似的功能,我可能不得不恢复到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    相关资源
    最近更新 更多