光标以获得所需的结果

Ask*_*kMe 1 sql-server sql-server-2008

我有这样的表:

x------x---------x----------------------x-------x
|  Id  |   ACCTNO  |   name2             |  QTY  |
x------x---------x----------------------x-------x
|   1  |   1     | here is 2014-01-13   |  10   |
|   1  |   2     | there are 2014-01-12  |  20   |
|   2  |   3     | 2014-01-08           |  40    |
|   2  |   4     | 2014-01-06           |  30    |
x------x---------x----------------------x-------x 
Run Code Online (Sandbox Code Playgroud)

我正在尝试记录英文字母与日期一起的记录.

我想这样做:

DECLARE @ACCTNO as INT;
DECLARE @name2 as varchar(max);
declare @st varchar(max)

DECLARE @BusinessCursor as CURSOR;


SET @BusinessCursor = CURSOR FOR
SELECT ACCTNO, Name2
FROM DPBENCHA2;

  OPEN @BusinessCursor;
   FETCH NEXT FROM @BusinessCursor INTO @ACCTNO, @name2;
    --PRINT  @Name2;

     WHILE @@FETCH_STATUS = 0
     BEGIN

     set @st = @Name2;
     select SUBSTRING(@st, patindex('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9]%', @st), 50)
      PRINT @st;
     FETCH NEXT FROM @BusinessCursor INTO @ACCTNO,@st;
    END

   CLOSE @BusinessCursor;
   DEALLOCATE @BusinessCursor;
Run Code Online (Sandbox Code Playgroud)

这里不是获取包含英文字母和日期的记录.我收到了所有记录.怎么解决这个?如何仅为帐号1和2获取记录?有没有其他方法可以做到这一点.

Gor*_*off 5

我正在尝试记录英文字母与日期一起的记录.

您似乎想要一个简单的查询:

SELECT ACCTNO, Name2
FROM DPBENCHA2
WHERE name2 LIKE '%[a-zA-Z]%';
Run Code Online (Sandbox Code Playgroud)

这比游标简单得多.通常,您希望避免使用SQL中的游标.

编辑:

如果要从Name2以下位置提取日期:

SELECT ACCTNO, Name2,
       SUBSTRING(name2,
                 PATINDEX('%[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]%'),
                 10) as thedate
FROM DPBENCHA2
WHERE name2 LIKE '%[a-zA-Z]%';
Run Code Online (Sandbox Code Playgroud)