2013-03-08 77 views
0

使用SQL Server 2005/2008,我試圖從列中返回只有一些字段中包含字母的數字。如何僅返回包含數字和字母的列中的數字?

SELECT 
    DISTINCT Cashregister 
FROM 
    dbo.RPTrs 
WHERE 
    TRSDate > GETDATE()-100 AND 
    StoreID = @sname 

返回

enter image description here

SELECT 
    DISTINCT Cashregister 
FROM 
    dbo.RPTrs 
WHERE 
    TRSDate > GETDATE()-100 AND 
    StoreID = @sname AND 
    Cashregister not like '%[^0-9]%' 

返回

enter image description here

w ^我需要的是從第一個查詢中返回所有的寄存器,但沒有X中的寄存器。

預期結果:

| Cashregister 
---------------- 
1 | 24 
2 | 44 
3 | 32 
4 | 36 
5 | 45 
6 | 21 
7 | 03 
8 | 40 
9 | 22 
10 | 23 
11 | 35 
12 | 01 
13 | 04 
14 | 34 
15 | 33 
16 | 02 
+1

是否總是以單個X和從未任何其它字符? – 2013-03-08 16:05:28

+0

是的。雖然JW給出了答案。 – JohnZ 2013-03-08 16:08:10

回答

2

使用REPLACE()

SELECT DISTINCT REPLACE(Cashregister, 'X', '') Cashregister 
FROM dbo.RPTrs 
WHERE TRSDate > GETDATE()-100 AND 
     StoreID = @sname 

注意: REPLACE()是區分大小寫的。

+0

恩,請問爲什麼是錯的呢? ':)' – 2013-03-08 16:05:18

+0

這個效果很好。謝謝 – JohnZ 2013-03-08 16:06:46

+2

那麼,最初你用'ISNUMERIC'過濾了這是絕對錯誤的。在回答之前,別人沒有完全讀完這個問題。 – 2013-03-08 16:08:11

0

如果在您的SQL版本中可用,則可以使用REGEXP。你不需要像我的例子那樣使用UNION。這只是爲了建立數據瓦特/表...:

-- Digits only -- 
SELECT REGEXP_REPLACE('X45','[^0-9]') digits_only FROM your_tab 
    UNION 
SELECT REGEXP_SUBSTR('X40','[[:digit:]]+') AS digits_only FROM your_tab 
/

DIGITS_ONLY 
------------ 
40 
45 

另外:

SELECT REGEXP_REPLACE('12ZXC3ASD456FGH8TED63','\D') digits_only FROM some_tab 
/
SELECT REGEXP_REPLACE('12ZXC3ASD456FGH8TED63','[^[:digit:]]') digits_only FROM some_tab 
/
+0

不,在本日發佈的任何SQL Server版本中都不可用。 – 2013-03-08 16:55:53

相關問題