SQL Server - 选择列描述中给出范围的列

Ank*_*kit 4 sql-server-2008

ID  Description

51  SY10K40F

18  SY20K40F

12  SY30K40F

28  SY40K40F

34  SY100K40H

35  SY240K40H

36  SY300K40H
Run Code Online (Sandbox Code Playgroud)

我必须只选择那些描述范围的id 10K to 40K.

注意 - Id是主键,从描述中我们得到10k,20k等.

val*_*lex 5

如果我做得对:

WHERE 
CAST(SUBSTRING(Description,3,CHARINDEX('K',Description)-3) AS INT)
BETWEEN 10 and 40
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle demo

假设您对此答案的评论没有修复第一个位置,所以在这种情况下您应该在MSSQL中使用PATINDEX()函数:

WHERE 
    CAST(SUBSTRING(Description,
                    PATINDEX('%[0-9]%',Description), 
                    PATINDEX('%[0-9]K%',Description)-
                    PATINDEX('%[0-9]%',Description)+1)
         AS INT)
      BETWEEN 10 and 40
Run Code Online (Sandbox Code Playgroud)

SQLFiddle demo