光标得到期望的结果

问题描述:

我的表是这样的:光标得到期望的结果

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 

我试图让其中英文字母有没有与日期一起记录。

林试图做到这一点,如:

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; 

而不是得到一个包含英文字母与日期一起记录在这里。我收到所有记录。如何解决这个问题?我怎样才能得到只有帐号1和2的记录?有没有其他方法可以做到这一点。

我试图获取英文字母和日期一起存在的记录。

你似乎想一个简单的查询:

SELECT ACCTNO, Name2 
FROM DPBENCHA2 
WHERE name2 LIKE '%[a-zA-Z]%'; 

这是一个比一个光标要简单得多。一般来说,你想避免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]%'; 
+0

我试图让其中英文字母有没有**与日期一起记录。** –

使用如下

SUBSTRING(@st, patindex('%[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]%', @st), 50) 

你可以使用一个简单的选择,假设你的日期格式为yyyy-dd-mmyyyy-mm-dd

select * from DPBENCHA2 where (name2 like '%[a-z]%') 

and name2 like '% [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]%' 

音符'%<space>[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]%'

的空间,这将确保'some alphabet 22323-12-34'将不会被包含在您选择