我有这样的表:
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获取记录?有没有其他方法可以做到。
答案 0 :(得分: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]%';
答案 1 :(得分:0)
使用如下
SUBSTRING(@st, patindex('%[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]%', @st), 50)
答案 2 :(得分:0)
您可以使用简单的选择,假设您的日期格式为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'
不会包含在您的选择