【问题标题】:how can i split a address string into street and housenumber through SQL in an Visual FoxPro database如何通过 Visual FoxPro 数据库中的 SQL 将地址字符串拆分为街道和门牌号
【发布时间】:2020-08-07 11:27:53
【问题描述】:

我们的客户使用 Visual FoxPro 数据库。 我需要创建一个 sql 字符串,我必须将地址字段拆分为街道和门牌号码。 我找到了 AT 和 CharIndex 函数,但它们只能直接在 Visual Fox Pro 中工作,而不是在 SQL 语句中。

我使用vb.net通过oledb连接到VFP数据库。 它必须在sql语句中完成,不能使用更多的代码。

提前致谢。

Dim con As System.Data.OleDb.OleDbConnection = Nothing
    con = New System.Data.OleDb.OleDbConnection("Provider=vfpoledb;Data Source=" & Me.lblDatabase.Text & ";Collating Sequence=machine;")
    con.Open()

    Dim sqlString As String = "SELECT Address FROM AddressTable"
    Dim cmd As OleDbCommand = New OleDbCommand(sqlString, con)
    Try
        con.Open()
    Catch ex As Exception

    End Try


    Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(cmd)

    Dim myDataSet As DataSet = New DataSet()

    ' Using DataAdapter object fill data from database into DataSet object
    Try
        myDA.Fill(myDataSet, "MyTable")
    Catch ex As Exception
        MsgBox("Error " & Err.Description)
    End Try


    ' Binding DataSet to DataGridView
    Try
        DataGridView1.DataSource = myDataSet.Tables("MyTable").DefaultView
    Catch ex As Exception

    End Try


    con.Close()

【问题讨论】:

  • 地址是否有任何一致性,即它们是否总是无一例外地采用“123 The Street”或“123, The Street”的格式?会有“221b Baker St”还是“Dunroamin”?
  • 您当然可以在通过 VFPOLEDB 对 VFP 数据执行的 SQL 中使用 AT()。真正的问题是,你的数据是什么样的,你认为你会用 AT() 做什么?还有,为什么要在 SQL 中完成?
  • 荷兰的地址总是:streetname {space} 号,所以我需要在字段中找到空格。谢谢,也许我以前做错了什么,AT现在似乎可以工作了。 sqlstring = "SELECT left(adm_prf2.st_street, AT(" ", adm_prf2.st_street)) FROM adm_prf2" 现在可以使用
  • @SanderWijnen,请看我的回复。虽然您的代码可能有效,但您可能会丢失数据。

标签: sql vb.net visual-foxpro


【解决方案1】:

您是说它在第一个空格处不断分开。那么:

Dim constr As String = "Provider=vfpoledb;Data Source=" & Me.lblDatabase.Text
Dim sqlString As String = "SELECT Address, 
    cast(Substr(Address, 1, AT(' ', Address)) as char(100)) as StreetName,
    cast(Ltrim(Substr(Address, AT(' ', Address))) as char(100)) as AddressLineRest
    FROM AddressTable"

Dim myDataTable As DataTable = New DataTable()
Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(sqlString, constr)

' Using DataAdapter object fill data from database into DataSet object

Try
    myDA.Fill(myDataTable)
    DataGridView1.DataSource = myDataTable.DefaultView
Catch ex As Exception
    MsgBox("Error " & Err.Description)
End Try

PS:您可能想要使用标准的.Net MessageBox 而不是 MsgBox。

注意:将数据转换为已知数据类型(如此处的 Char(100))非常重要。否则你可能会默默地丢失数据。

【讨论】:

    猜你喜欢
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多