我有一个票务旅程的字段,它始终不是以城市代码开头的,而且票数也不同。 好例子:
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"
答案 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')
然后使用它来通知查询输出。
我的建议是,不要考虑从您正在搜索的字符串中进行选择,而是使用搜索的输入来通知输出。我希望这是有道理的。如果您有疑问,我会尝试提出一些建议。