用于检查特定字符的SQL if-else语句

时间:2017-10-17 09:20:22

标签: sql sql-server

对于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列返回如下值: -

  1. 使用('/ RandomString')

    返回的值

    / 04457120 GZQRUSAXXX

  2. 返回的值没有('/ RandomString')

    LTDXGB7PXXX

  3. 理想情况下,CountryCode列将返回

    1. 使用('/ RandomString')返回的值然后删除

      US

    2. 返回的值没有('/ RandomString')

      GB

    3. 我希望这个问题有意义,如果你需要我更好地澄清某些内容,那么请使用Microsoft SQL。

      亲切的问候,

      赖安

2 个答案:

答案 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

注意:此查询中没有检查长度。