对于SQL来说,我是一个完整的新手所以我希望有人可以帮助我,我需要做的是创建一个if-else语句,检查是否存在特定字符('/')如果是,则忽略此后的文本,直到找到空白区域。
找到空白区域时,只返回第5个和第6个字符。如果没有找到('/),则只返回第5个和第6个字符。
我的代码到目前为止我的代码如下,我知道这可能会更清晰,但我现在正在学习SQL,所以我很抱歉。
select top 10000
full_message,
SUBSTRING (full_message,CHARINDEX(':52A:', full_message) + 5, CHARINDEX(':5', full_message, (CHARINDEX(':52A:', full_message)+1)) - CHARINDEX(':52A:', full_message) - 5) as [CountryCode]
-- create if-else statement to see if the first character is a '/' if it is from the white space take the 5th & 6th characters.
-- else take the 5th & 6th characters
from [dbo].[tbl_Test] where CHARINDEX(':52A:', full_message) > 0
我的CountryCode列返回如下值: -
使用('/ RandomString')
返回的值/ 04457120 GZQRUSAXXX
返回的值没有('/ RandomString')
LTDXGB7PXXX
理想情况下,CountryCode列将返回
使用('/ RandomString')返回的值然后删除
US
返回的值没有('/ RandomString')
GB
我希望这个问题有意义,如果你需要我更好地澄清某些内容,那么请使用Microsoft SQL。
亲切的问候,
赖安
答案 0 :(得分:2)
从GZQRUSAXXX'获得美国的#04; / 04457120你需要炭5和6 从< LTDXGB7PXXX'获得GB你需要char 5和6
执行此操作的查询可以通过以下方式执行:
declare @full_message varchar(100) = '/04457120 GZQRUSAXXX' -- 'LTDXGB7PXXX'
select @full_message,
case when charindex('/', @full_message) > 0 then
substring(
substring( substring(@full_message, charindex('/', @full_message) + 1, len(@full_message)),
charindex(' ', substring(@full_message, charindex('/', @full_message) + 1, len(@full_message))) + 1,
len(substring(@full_message, charindex('/', @full_message) + 1, len(@full_message)))
), 5, 2)
else
substring(@full_message, 5, 2)
end
请注意,这仅适用于' /'之后总是有空格的情况。 此查询中也没有检查长度,如果空格后没有7个字符也会出错
答案 1 :(得分:2)
试试这个。
它更短,之后还会检查/
和space
。
DECLARE @full_message varchar(100) = '/04457120 GZQRUSAXXX'
SELECT
(CASE WHEN CHARINDEX('/', @full_message) > 0 AND CHARINDEX(' ', @full_message, CHARINDEX('/', @full_message)) > 0
THEN SUBSTRING(@full_message, CHARINDEX(' ', @full_message, CHARINDEX('/', @full_message))+5, 2)
ELSE SUBSTRING(@full_message, 5, 2)
END) AS Countrycode
注意:此查询中没有检查长度。