选择字符串的特定部分

时间:2018-07-04 20:42:05

标签: sql sql-server

给出一列格式为“ abc”的字符串,其中a,b和c可以具有任意数量的数字(例如1-22-333、120009-5555-1),我将如何创建新的两个新列:“ a”和“ b”?

例如,从1-22-333,我想要两个输出:1和22;从120009-5555-1开始,我想要120009和5555:

String          a      b
1-22-333        1      22
120009-5555-1   120009 5555

4 个答案:

答案 0 :(得分:2)

SQL Fiddle

查询1

declare @s varchar(25) = '120009-5555-1'
select @s, left(@s, charindex('-', @s) - 1) as a, substring(@s, charindex('-', @s) + 1, charindex('-', @s, charindex('-', @s) + 1) - charindex('-', @s) - 1) as b

Results

|               |      a |    b |  
|---------------|--------|------|  
| 120009-5555-1 | 120009 | 5555 |  

答案 1 :(得分:2)

为此还有一个滥用PARSENAME的小技巧。

例如:

SELECT val, 
REVERSE(PARSENAME(REVERSE(REPLACE(val,'-','.')),1)) as part1,
REVERSE(PARSENAME(REVERSE(REPLACE(val,'-','.')),2)) as part2
FROM (VALUES 
  ('12-345-6789'),
  ('1234-5678-90')
) q(val)

答案 2 :(得分:-1)

我认为您正在寻找子串吗?

示例:

SELECT name, SUBSTRING(name, 1, 1) AS Initial,
SUBSTRING(name, 3, 2) AS ThirdAndFourthCharacters
FROM sys.databases  
WHERE database_id < 5; 

来源: Microsoft documentation

答案 3 :(得分:-1)

您可以尝试使用REGEX分割字符串的方法:

select REGEXP_SUBSTR(myColumn,'^[0-9]+-'), // First part 
       REGEXP_SUBSTR(myColumn,'-[0-9]+-'), // Midlle part
       REGEXP_SUBSTR(myColumn,'-[0-9]+$')  // last part 
   from mytable;

您可以在该子字符串之后使用,以使每个部分中都包含'-'