0

使用 SQL Server 2005/2008,我试图只返回列中的数字,该列中也有一些带有字母的字段。

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

退货

在此处输入图像描述

还有这个

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

退货

在此处输入图像描述

我需要的是从第一个查询中返回所有寄存器,但在它所在的位置没有 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
4

2 回答 2

2

采用REPLACE()

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

注意:REPLACE()区分大小写。

于 2013-03-08T16:02:29.117 回答
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
/
于 2013-03-08T16:34:53.907 回答