我有一个领域,它是一个机票旅行,它总是不从城市代码开始,而且它因票而异。很好的例子:
HAM EK X/DXB EK DUR M/IT EK X/DXB EK HAM M/IT然而,在某些情况下,它的开头是"I-“或日期,如”18 are“或”18 are 16“或”18 are 2016“。以下是几个例子:
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因此,我希望得到一些帮助,以便只从字符串中检索第一个城市,在上述情况下,字符串是"HAM"。
发布于 2016-09-02 14:03:13
试试这个:
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发布于 2016-09-02 13:37:27
对于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发布于 2016-09-02 13:44:43
您可以使用SUBSTRING,如果您知道要从哪个位置选择前缀的长度总是新的,那么这几乎没有什么意义,就好像您在搜索' cities ‘,那么您将从某个地方(一个城市表或硬代码值)驱动它。所以我想你会去寻找
WHERE field = "%HAM%" or WHERE field IN ('list','of','cities') 然后使用它通知查询输出。
我的建议是,不要考虑从您要搜索的字符串中选择,而是使用搜索的输入通知输出。我希望这是合理的。如果你有疑问要看,我会尝试提出一些建议。
https://stackoverflow.com/questions/39293423
复制相似问题