我有一张这样的桌子:
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的记录?有没有其他方法可以做到。
发布于 2017-02-24 21:11:47
我在试着得到记录,上面有英文字母和日期。
您似乎想要一个简单的查询:
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]%';发布于 2017-02-24 21:12:44
按如下方式使用
SUBSTRING(@st, patindex('%[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]%', @st), 50)发布于 2017-02-24 22:58:51
假设日期格式为yyyy-dd-mm或yyyy-mm-dd,则可以使用简单的select
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'不会包含在您的选择中
https://stackoverflow.com/questions/42439384
复制相似问题