【问题标题】:SQL scalar variable value between and和之间的 SQL 标量变量值
【发布时间】:2012-03-22 12:49:00
【问题描述】:

表“数据”中的“名称”

"type12pen105A"
"type12pen110A"
"type12pen121B"

Declare @n int;

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

我需要的输出是

"type12pen105A"
"type12pen110A"

【问题讨论】:

  • -1 缺少基本信息,似乎没有努力调整问题以添加该信息。 人们总是希望我们花时间回答他们不会花时间提出的问题,这总是让我感到惊讶。 (乔治)
  • 抱歉,我在发布的下一分钟给那个问题添加了一些名字,请找到它们。我应该提供更多信息。我不想占用你太多时间
  • 很公平,我会在您编辑问题后删除反对票(现在投票已锁定,直到有人编辑问题)

标签: sql sql-server-2005-express


【解决方案1】:
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'

【讨论】:

    【解决方案2】:

    根据您提供的信息,这很难看,但应该可以:

    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
    

    【讨论】:

      【解决方案3】:
      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'
      

      如果这是一个大表,您可能会更好地通过对数据运行进程并将产品名称的不同方面拆分为各个字段并查询这些字段来获得更好的服务。使用substringright 意味着您不会获得索引的好处。

      【讨论】:

      • 数字长度不固定
      • 那么您需要修改您的问题并包含有关名称格式的更多信息/示例。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      • 2013-04-10
      • 2012-03-30
      • 2019-11-02
      • 2021-02-11
      • 2020-06-28
      相关资源
      最近更新 更多