需要查询才能在地址列中查找字符串

时间:2013-11-14 05:58:11

标签: sql oracle toad

我想选择地址字符串的前4个字母忽略数字或P.O.框。

例如,我在“customers”表中有一个数据库列“address”。

51 church st 

在查询中,我只想忽略数字的“库尔”。它可以是任何数字。我对数字不感兴趣。另外,我不希望这只是一个记录。我希望每个记录都能实现这一点 例如,我有这些记录:

51 church st
6178 fookeral ave
597537 state ct

在我的1个查询中,我希望结果看起来像这样

Chur
Fook
Stat

如何在一个查询中获取此内容?

2 个答案:

答案 0 :(得分:1)

CHARINDEX函数允许您在另一个字符串中搜索字符串。使用它来查找空格字符的位置,然后取下面的4个字符。

以下是一个例子:

SELECT SUBSTRING([Address], CHARINDEX(' ', [Address]) + 1, 4)
FROM [Your_Table]

答案 1 :(得分:1)

作为CHARINDEX的替代方案,您可以使用PATINDEX并使其与a-z范围内的任何字符匹配:

SELECT SUBSTRING(address, PATINDEX('%[a-z]%', address), 4) AS FirstFour
FROM customers

如果您有51 32 church st之类的地址,即使用数字后跟空格后跟另一个数字,则会得到正确的结果。

此解决方案假定您使用Microsoft SQL Server。

编辑:添加了Oracle解决方案(使用11g R2测试)。

在Oracle中,您可以使用正则表达式和REGEXP_SUBSTR函数,如下所示:

SELECT
  REGEXP_SUBSTR("Address",'[[:alpha:]]{4}') "FourChars",
  INITCAP(REGEXP_SUBSTR("Address",'[[:alpha:]]{4}')) "FourCharsInitCap"
FROM customers

返回:

FOURCHARS   FOURCHARSINITCAP
chur        Chur
fook        Fook
stat        Stat