SQL - 从字符串中提取CITY

时间:2016-09-02 13:17:16

标签: sql

我有一个票务旅程的字段,它始终不是以城市代码开头的,而且票数也不同。 好例子:

HAM EK X/DXB EK DUR M/IT EK X/DXB EK HAM M/IT

然而,在某些情况下,它始于" I - "或约会" 18JAN"或" 18JAN16"或" 18JAN2016"。以下几个例子:

I- HAM EK X/DXB EK DUR M/IT EK X/DXB EK HAM M/IT
18JAN HAM EK X/DXB EK DUR M/IT EK X/DXB EK HAM M/IT
18JAN16 HAM EK X/DXB EK DUR M/IT EK X/DXB EK HAM M/IT
18JAN2016 HAM EK X/DXB EK DUR M/IT EK X/DXB EK HAM M/IT

因此,我想帮助只从字符串中检索第一个CITY,在上述情况下" HAM"

3 个答案:

答案 0 :(得分:1)

试试这个:

Declare @tblTest AS Table
(
   Ticket VARCHAR(100)
)

INSERT INTO @tblTest VALUES ('I- HAM EK X/DXB EK DUR M/IT EK X/DXB EK HAM M/IT')
INSERT INTO @tblTest VALUES ('18JAN HAM EK X/DXB EK DUR M/IT EK X/DXB EK HAM M/IT')
INSERT INTO @tblTest VALUES ('18JAN16 HAM EK X/DXB EK DUR M/IT EK X/DXB EK HAM M/IT')
INSERT INTO @tblTest VALUES ('18JAN2016 HAM EK X/DXB EK DUR M/IT EK X/DXB EK HAM M/IT')

SELECT  
    SUBSTRING
    (
        REPLACE
        (
            Ticket,
            SUBSTRING(Ticket,1,CHARINDEX(' ',Ticket)),
            ''
        ),
        0,
        CHARINDEX
        (
            ' ',
            REPLACE
            (
                Ticket,
                SUBSTRING(Ticket,1,CHARINDEX(' ',Ticket)),
                ''
            )
        )
    )
FROM @tblTest

答案 1 :(得分:0)

对于Sql Server,请使用以下脚本。

DECLARE @data VARCHAR(150)='18JAN HAM EK X/DXB EK DUR M/IT EK X/DXB EK HAM M/IT'

SELECT CASE WHEN @data LIKE 'I_%' THEN SUBSTRING(@data,CHARINDEX(' ', @data),CHARINDEX(' ', @data,CHARINDEX(' ',@data) + 1) + 1-CHARINDEX(' ', @data)) 
            WHEN @data LIKE '[0-9]%' THEN SUBSTRING(@data,CHARINDEX(' ', @data),CHARINDEX(' ', @data,CHARINDEX(' ',@data) + 1) + 1-CHARINDEX(' ', @data))
            ELSE SUBSTRING(@data,1,CHARINDEX(' ', @data)) END

答案 2 :(得分:0)

你可以使用 SUBSTRING ,如果你知道你在哪里选择哪个会起作用,如果你总是新的前缀的长度,但是这没有什么意义,好像你正在搜索&# 39;的城市'那么你将从某个地方驾驶这个(城市表或硬代码值)。所以我想你会搜索类似

的东西
WHERE field = "%HAM%" or WHERE field IN ('list','of','cities') 

然后使用它来通知查询输出。

我的建议是,不要考虑从您正在搜索的字符串中进行选择,而是使用搜索的输入来通知输出。我希望这是有道理的。如果您有疑问,我会尝试提出一些建议。