从列中选择varchar值

时间:2015-06-02 15:28:34

标签: sql sql-server-2008

我正在研究SQL 2008并且有一个包含1000个代码的表 - 示例如下:

D37
D37.0
D38
D38.0
D39
D39.0
D3A
D3A.0
D40

我需要做的是选择D37D40之间的值。但是,我不想要D3A值(或D3B或D3C)。我尝试过以下方法:

SELECT Code
FROM Table
WHERE Code BETWEEN 'D37' AND 'D40'

但是,这会获得上面列出的所有代码,包括D3A代码。

有没有办法排除不属于37-40范围的代码?

2 个答案:

答案 0 :(得分:1)

假设始终遵循单字母约定,并且没有比数据中显示的更奇怪的字符,您可以这样做:

WITH cte AS (
    [MyColumn]
  , SELECT SUBSTRING([MyColumn],2,LEN([MyColumn)-1) AS Code
  FROM MyTable
  WHERE ISNUMERIC(SUBSTRING([MyColumn],2,LEN([MyColumn)-1)=1
)
SELECT [MyColumn]
FROM cte
WHERE CAST(Code AS float) BETWEEN 37 AND 40

答案 1 :(得分:0)

它很乱,但这应该按照你要求做的。

SELECT代码
来自Mytable
其中
ISNUMERIC(SUBSTRING(代码,2,(len(代码))))> 0
并将(float,SUBSTRING(code,2,(len(code)))转换为37到40之间