我正在编写一个SQL查询,以从表alpha中具有“ /”的列项中提取值。我的值像:
300/500/100
25/50/15
300/500
100/300
25/50/15
100/300
25000/50000
100/300
100/300
25/50/15
100/300/100
300/500/100
300/500/300
25/50/15
25000/50000
100/300
输出应为
300/500
100/300
100/300
100/300
25000/50000
它不应包含任何带有双“ /”的数字。
我尝试使用以下查询提取准确结果
我的方法1:
Select term from alpha where
term like '%[0-9]/[0-9]%'
我的方法2
Select term from alpha where (CASE
WHEN term Like '%/%' THEN Left(term, CHARINDEX('/', term)-1)
Else term
End
但是在执行方法1时我没有得到准确的结果。方法2中出现错误。请帮助我找出问题所在
答案 0 :(得分:5)
尝试一下:
select term from alpha
where term like '%/%' -- >= one '/'
and term not like '%/%/%' -- < two '/'
答案 1 :(得分:3)
类似于其他方法,该方法只获得至少具有1 .Last.value
的项,然后将结果进一步限制为不具有2 > 4*5
[1] 20
> .Last.value * 5
[1] 100
的项。
在此处查看示例:https://rextester.com/LQI52271
/
输出
请注意,输出结果与您的不同。在您的输入中,确实有5个100/300实例。
/
答案 2 :(得分:1)
一种可能的方法是计算/
个字符的数目,并仅选择计数等于1
的行:
输入
CREATE TABLE #alpha (
term varchar(50)
)
INSERT INTO #alpha
(term)
VALUES
('300/500/100'),
('25/50/15'),
('300/500'),
('100/300'),
('25/50/15'),
('100/300'),
('25000/50000'),
('100/300'),
('100/300'),
('25/50/15'),
('100/300/100'),
('300/500/100'),
('300/500/300'),
('25/50/15'),
('25000/50000'),
('100/300')
声明
SELECT term
FROM #alpha
WHERE
(term LIKE '%/%') AND
(LEN(term) - LEN(REPLACE(term, '/', ''))) = 1
输出
--------------
term
--------------
300/500
100/300
100/300
25000/50000
100/300
100/300
25000/50000
100/300
答案 3 :(得分:0)
另一种选择(只是为了好玩)是使用hierarchyid
数据类型
示例
Select *
From alpha
Where try_convert(hierarchyid,'/'+term+'/').GetLevel() = 2