0

我有一个名为的表Postcodes,其中包含超过一百万条记录。在此表中,我有一个名为的列PostCodeText,其中包含以下内容:

NG1 1AA
NG1 1AB
NG1 1AC
NG2 1AA
NG2 5TH
NG17 3LP
DE15 4BP
NG17 5GL
DE19 4EE...

我需要的是一个 MSSQL 语句,它DISTINCT根据部分字符串返回匹配项。例如:如果我想找到所有不同的 NG 邮政编码,我想返回:

NG1
NG2
NG17

我试过类似的东西:

SELECT DISTINCT postcodetext 
FROM postcodes 
WHERE (postcode_text LIKE 'NG%') 
ORDER BY postcodetext

我觉得我可能已经接近答案了,但它还没有,任何帮助都会非常有用。另外我听说 usingLIKE是一个较慢的选项,然后 using=有比这样做更快的方法吗?

4

1 回答 1

0

尝试

SELECT LEFT(postcodetext,CHARINDEX(' ',postcodetext,0))
FROM postcodes
WHERE postcodetext like 'NG%'
GROUP BY LEFT(postcodetext,CHARINDEX(' ',postcodetext,0))
ORDER BY postcodetext

好的,我想我在这里遗漏了一些东西ORDER BY,当我在管理工作室中运行上面的语句时,它可以正常工作(如果我放弃了)。但是当我在我的 VB.net 代码中运行它时,我遇到了一个问题:

运行语句并将值分配到我的数据表中后,我使用以下代码:

For Each rows In dt.Rows
    Select Case opt
        Case 1 ' 
            frmSettings.lstAllPostcodes.Items.Add(rows.Item("postcodetext"))
            frmSettings.ProgBarSettings.Value = i
            i = i + 1
    End Select
Next

尝试引用时失败rows.item("postcodetext")。我意识到这与SELECT使用 of 的语句LEFT有关。我希望我的列表框保存部分结果(即NG1NG2NG17

于 2013-07-02T14:24:43.820 回答