给出一列格式为“ 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
答案 0 :(得分:2)
查询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;
答案 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;
您可以在该子字符串之后使用,以使每个部分中都包含'-'