如何获得带有“ /”的数字

时间:2019-04-11 20:03:14

标签: sql sql-server

我正在编写一个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中出现错误。请帮助我找出问题所在

4 个答案:

答案 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