Значение скалярной переменной SQL между и - PullRequest
2 голосов
/ 22 марта 2012

«Имена» в таблице «Данные»

"type12pen105A"
"type12pen110A"
"type12pen121B"

Declare @n int;

select Names From Data
where Names ='type12pen'+cast(@n between 100 and 110 as varchar)+'A'

Мой требуемый выход -

"type12pen105A"
"type12pen110A"

Ответы [ 3 ]

1 голос
/ 22 марта 2012
SELECT Names
FROM Data
WHERE Names LIKE 'type12pen%' 
AND CAST(SUBSTRING(Names,10,3) AS INT) BETWEEN 100 AND 110
AND RIGHT(Names,1) = 'A'
0 голосов
/ 22 марта 2012

Судя по предоставленной вами информации, это некрасиво, но должно работать:

create table #data
(
    names varchar(50)
)

insert into #data values('type12pen105A')
insert into #data values('type12pen101A')
insert into #data values('type12pen112A')
insert into #data values('type12pen120A')
insert into #data values('type12pen110A')
insert into #data values('type12pen106A')
insert into #data values('type12pen110C')
insert into #data values('type12pen110D')
insert into #data values('type12pen110E')
insert into #data values('type12pen121B')

SELECT Names
FROM #Data
WHERE Names LIKE 'type12pen%' 
AND RIGHT(Names,1) = 'A'
AND replace(replace(names, 'type12pen', ''), 'A', '') BETWEEN 100 AND 110 

drop table #data

Результаты:

type12pen105A
type12pen101A
type12pen110A
type12pen106A
0 голосов
/ 22 марта 2012
declare @Data table(
  name varchar(32)
)

insert into @Data values('type12pen105A')
insert into @Data values('type12pen110A')
insert into @Data values('type12pen121B')
insert into @Data values('book11jil124C')


select name
from @Data
where cast(substring(name, 10, 3) as int) between 100 and 110
      and name like 'type12pen%'
      and right(name, 1) = 'A'

Если это большая таблица, вам, вероятно, будет лучше обслужить ее, запустив процесс обработки данных и разделив различные аспекты имени продукта на отдельные поля и запросив их.Использование substring и right означает, что вы не получите преимущества от индексов.

...