2017-02-24 97 views
1

我的表是這樣的:光標得到期望的結果

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的記錄?有沒有其他方法可以做到這一點。

回答

5

我試圖獲取英文字母和日期一起存在的記錄。

你似乎想一個簡單的查詢:

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

我試圖讓其中英文字母有沒有**與日期一起記錄。** –

0

使用如下

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

你可以使用一個簡單的選擇,假設你的日期格式爲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'將不會被包含在您選擇

相關問題