【问题标题】:Dividing a string into two parts and selecting into two variables将字符串分成两部分并选择两个变量
【发布时间】:2011-08-05 07:52:25
【问题描述】:

我使用的是 SQL Server 2005。我有一个带有特殊字符 : 的字符串,例如:

XYZ:xyz@mail.com

我想把这个字符串分成两个子字符串并选择成变量。特殊字符: 只是一个分隔符。

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

请指导我如何实现。

【问题讨论】:

  • 字符串中总会有冒号吗?没有的话应该怎么处理?

标签: sql sql-server-2005 tsql


【解决方案1】:

如果 ':' 缺失,@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

【讨论】:

    【解决方案2】:

    字符串分割指南:

    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
    

    【讨论】:

    • 我知道你是多么喜欢细节,试着在字符串中移动冒号。
    • 不确定我是否理解您的意思。如果你的意思是改变冒号的位置,好吧,我刚刚尝试过,没有发生任何奇怪的事情。您的意思是“删除”吗? (我承认我的解决方案不是为治疗结肠缺失而设计的,但这不是要求的。)
    【解决方案3】:
    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 :
    

    解释:

    substring 获取从 start_position 到 end_position 的字符串的一部分

    SUBSTRING(string, start_position, end_position)

    charindex 获取字符串中字符的位置

    CHARINDEX(character_to_search, string_to_search_in)

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      相关资源
      最近更新 更多