有一表A。
ID
1000
1001
1002
1003
40001
20002
30003
P10001
P10002
P10003
P10004
P10005如何在能从这个ID字段里找到1003这个值? sql = "SELECT MAX(ID) AS 编号 FROM 表A WHERE cast(ID as integer) BETWEEN 1000 AND 9999" '我用以上查询却因为有P10001这些带字母而出错,求解答!!!
ID
1000
1001
1002
1003
40001
20002
30003
P10001
P10002
P10003
P10004
P10005如何在能从这个ID字段里找到1003这个值? sql = "SELECT MAX(ID) AS 编号 FROM 表A WHERE cast(ID as integer) BETWEEN 1000 AND 9999" '我用以上查询却因为有P10001这些带字母而出错,求解答!!!
解决方案 »
- ADODB.Recordset.RecordCount 问题。
- 谁能帮我解决下啊````运行时错误```
- 保存图片框中的文本框
- 怎么样给datareport中每页的页注脚中某个控件动态的赋值??
- 当用户在DataGrid中点击某一行,怎么样才能让用户知道已经选了这行了。各位给点见意。
- VB6程序 生成的程序文件(.EXE)有100M,但是用WINRAR压缩后仅2M,这是怎么回事
- VB抓取网页某处内容【求流程】
- 请教一个控件的问题,在一个文本框中插入一个回车符有几种方法?
- 想了解vb7的请进来 介绍VB.NET(2) (本文是我翻译国外资料的文章),以后定期发布.
- 请教各位高手,用vb语言如何使一个文件内容修改后,该文件的时间属性保持在修改以前,即其修改时间不变,谢谢!
- VB使用WINSOCK作数据转发
- SQL查询语句的问题?
如果是 Access 就不好弄了。
不行,提示错误,“将varchar值"P10001”转换为数据类型为int的列时发生语法错误”
sql = "SELECT MAX(ID) AS 编号 FROM 表A WHERE cast(ID as integer) BETWEEN 1000 AND 9999"
我用以上查询却因为有P10001这些带字母而出错.
Sql = "Select Max(Right(ID,5)*1) From 表A Where Right(ID,5)*1 Between 1000 And 9999"
AS
BEGIN
DECLARE @IncNum integer
DECLARE @intStrSize integer
DECLARE @intReadCount integer
DECLARE @strTemp varchar(1000)
DECLARE @strRetStr varchar(1000)
SET @intStrSize=Len(@strRS)
SET @intReadCount=1
SET @strRetStr=''
WHILE @intReadCount<=@intStrSize
BEGIN
SET @strTemp = Substring(@strRS,@intReadCount,1)
IF Ascii(@strTemp)>=Ascii('0') AND Ascii(@strTemp)<=Ascii('9')
SET @strRetStr = @strRetStr+@strTemp
SET @intReadCount = @intReadCount + 1
END
IF Len(@strRetStr)>0
SET @IncNum = @strRetStr
ELSE
SET @IncNum = 0
RETURN (@IncNum)
END
go选好函数执行的数据库,然后执行函数过程,成功后函数会加到"标量值函数"里
在查询的时候这样输入查询SELECT MAX(dbo.GetStrNumber(ID)) AS MaxID FROM 表
SELECT MAX([ID])
FROM TBTest
WHERE CASE WHEN ASCII([ID])<58 THEN [ID] ELSE 0 END BETWEEN 1000 AND 9000
SELECT MAX([ID])
FROM A
WHERE CASE WHEN ASCII([ID])<58 THEN [ID] ELSE 0 END BETWEEN 1000 AND 9000
USE testIF EXISTS (SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE table_name = 'TBTest')
DROP TABLE TBTest
GOCREATE TABLE TBTest
(
[ID] varchar(10)
)
GOINSERT INTO TBTest ([ID]) VALUES ('1000');
INSERT INTO TBTest ([ID]) VALUES ('1001');
INSERT INTO TBTest ([ID]) VALUES ('1002');
INSERT INTO TBTest ([ID]) VALUES ('1003');
INSERT INTO TBTest ([ID]) VALUES ('40001');
INSERT INTO TBTest ([ID]) VALUES ('20002');
INSERT INTO TBTest ([ID]) VALUES ('30003');
INSERT INTO TBTest ([ID]) VALUES ('P10001');
INSERT INTO TBTest ([ID]) VALUES ('P10002');
INSERT INTO TBTest ([ID]) VALUES ('P10003');
INSERT INTO TBTest ([ID]) VALUES ('P10004');
INSERT INTO TBTest ([ID]) VALUES ('P10005');
GO
SELECT MAX([ID])
FROM TBTest
WHERE CASE WHEN ASCII([ID])<58 THEN CAST([ID] AS INT) ELSE 0 END BETWEEN 1000 AND 9000
GO-- 结果:1003
sql = "Select MAX(ID) From (Select * From 表A Where ID Between '1000' And '9999') A Where ID Between 1000 And 9999"sql = "Select MAX(ID) From (Select * From 表A Where ID Between '1000' And '9999') A Where ID Between 1000 And 9999"红色部分得以下结果,去除了带字母部分的项,但不在1000至9999之间,超出9999值的出查询出来了,为什么????????????
1000
1001
1002
1003
40001
20002
30003
正如16F所说,是按字符排列的;
如果是类似'100abc',也会被查到;实际上确实是需要逐个字符判断字段内容的。
如果没有这种数据,那个查找的结果也算正确吧。
FROM TBTest
WHERE CASE ISNUMERIC([ID]) WHEN 1 THEN CAST([ID] AS INT) ELSE 0 END BETWEEN 1000 AND 9000
SELECT MAX([ID])
FROM TBTest
WHERE CASE ISNUMERIC([ID]) WHEN 1 THEN CAST([ID] AS INT) ELSE 0 END BETWEEN 1000 AND 9000