Разделение строки на две части и выбор из двух переменных - PullRequest
0 голосов
/ 05 августа 2011

Я использую SQL Server 2005. У меня есть строка со специальным символом :, например:

XYZ:xyz@mail.com

Я хочу разделить эту строку на две подстроки и выбрать переменные.Специальный символ : - это просто разделитель.

@variable1=XYZ
@variable2=xyz@mail.com

Пожалуйста, объясните мне, как это возможно.

Ответы [ 3 ]

2 голосов
/ 05 августа 2011

Если ':' отсутствует, @ v1 будет нулевым

DECLARE @v1 varchar(20) 
DECLARE @v2 varchar(20)

DECLARE @s varchar(20)
SET @s = 'XYZ:xyz@mail.com'

SELECT @v1 = stuff(b, len(b),1,''), 
       @v2 = stuff(@s, 1, len(b),'') 
FROM (SELECT left(@s, charindex(':', @s)) b) a

SELECT @v1 v1,@v2 v2

Результат:

v1  v2
--- ------------
XYZ xyz@mail.com
1 голос
/ 05 августа 2011

Руководство по разделению строк:

  1. Используйте CHARINDEX, чтобы найти положение :.

  2. Используйте SUBSTRING, чтобы захватить все символы до позиции : и поместить их в @variable1.

  3. Используйте SUBSTRING, чтобы захватить все символы после позиции : и сохранить их в @variable2.

Возможная реализация:

DECLARE @string varchar(max), @variable1 varchar(max), @variable2 varchar(max);
SET @string = 'XYZ:xyz@mail.com';

SELECT
  @variable1 = SUBSTRING(S, 1, P - 1),
  @variable2 = SUBSTRING(S, P + 1, L - P)
FROM (
  SELECT
    S = @string,
    P = CHARINDEX(':', @string),
    L = LEN(@string)
) s;

SELECT @variable1, @variable2;

Выход:

-------------------- --------------------
XYZ                  xyz@mail.com
1 голос
/ 05 августа 2011
DECLARE @var VARCHAR(100)
SET @var='XYZ:xyz@mail.com'

SELECT 
SUBSTRING(@var, 1, CHARINDEX(':',@var)-1) as var1 -- get part till :
,SUBSTRING(@var, CHARINDEX(':',@var)+1, LEN(@var)) AS var2 -- get part after :

Объяснил:

Подстрока get является частью строки от start_position до end_position

SUBSTRING (строка, начальная_позиция, конечная_позиция)

charindex получает положение символа внутри строки

CHARINDEX (символ_поиск, строка_поиск_инструкция)

http://msdn.microsoft.com/en-us/library/ms187748.aspx

http://msdn.microsoft.com/en-us/library/ms186323.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...