光标得到期望的结果
问题描述:
我的表是这样的:光标得到期望的结果
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]%';
答
使用如下
SUBSTRING(@st, patindex('%[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]%', @st), 50)
答
你可以使用一个简单的选择,假设你的日期格式为yyyy-dd-mm
或yyyy-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'
将不会被包含在您选择
我试图让其中英文字母有没有**与日期一起记录。** –