我有一个Access 2000查询,适用于SQL Server 2008 R2中的链接表。我需要将其写为视图或通过查询:
`
SELECT Max(CLng((Mid([tbl1]![ID],5)))) AS lastnumberused
FROM [tbl1]
WHERE ((([tbl1]![ID]) Like "OODD*" And ([tbl1]![ID]) Not Like "OODDid*" And ([tbl1]![ID]) Not Like "*x") AND ((CLng((Mid([tbl1]![ID],5))))<1000000));
`
所以我要找的是1000000以下的最大数字,以OODD%开头但不是OODDID%。记录也不能以'x'结尾。
我在TSQL for SQL Server中的代码看起来像这样但不起作用......
`
SELECT
convert (int, (substring(tblMain.BarcodeID,5,10))) as X1, [ID]
FROM tblMain
WHERE ([tbl1]![ID] LIKE N'OODD%')
AND ([tbl1]![ID] NOT LIKE N'%x%')
AND ([tbl1]![ID] NOT LIKE N'OODDID%')
Select MAX (x1)+1
from bar1
where (x1<1000000)
`
建议? 感谢,H
2013年6月15日更新
WITH T1 (number)
AS
(SELECT substring(tbl1.ID,5,10)
FROM tblMain AS tbl1
WHERE (ID LIKE N'oodd%')
AND (ID NOT LIKE N'%x%')
AND (ID NOT LIKE N'ooddID%'))
SELECT (cast((number)as int)) FROM T1
这可以工作并返回561770行。
With T1(number)
as(SELECT cast(SUBSTRING(ID, 5, 7)as int)
FROM tblMain as tbl1
WHERE (tbl1.ID LIKE N'oodd%')
AND (tbl1.ID NOT LIKE N'%x%')
AND (tbl1.ID NOT LIKE N'%ooddID%')
AND ISNUMERIC(SUBSTRING(tbl1.ID,5,10))=1)
Select max(number) from T1
也有效但返回1000000以上的数字
添加where语句时,以下代码包含应在前一个语句中排除的记录。
With T1(number)
as(SELECT cast(SUBSTRING(ID, 5, 7)as int)
FROM tblMain as tbl1
WHERE (tbl1.ID LIKE N'oodd%')
AND (tbl1.ID NOT LIKE N'%x%')
AND (tbl1.ID NOT LIKE N'%ooddID%')
AND ISNUMERIC(SUBSTRING(tbl1.ID,5,10))=1)
Select max(number) from T1
where x1 <1000000
答案 0 :(得分:2)
WHERE子句包含一个[tbl1]表,该表在FROM子句中不存在。您应该将其更改为tblMainBee或在带有AS的FROM子句中添加“tbl1”别名。
此外,您有两个未连接的SELECT语句,而不是一个。同样,在第二个SELECT中,有一个bar1表,它没有出现在其他地方......它是否正确?
另一个错误是您无法使用“!”分隔表名和字段名。你必须使用一个点。
最后,尝试转换数据类型时会出现问题。你不需要它,因为字符串之间的比较也有效。
您的访问SELECT语句更简单。
尝试
WITH T1(number) AS (
SELECT substring(tbl1.ID,5,LEN(tbl1.ID)-4)
FROM tblMainBee as tbl1
WHERE ([tbl1].[ID] LIKE N'OODD%')
AND ([tbl1].[ID] NOT LIKE N'%x%')
AND ([tbl1].[ID] NOT LIKE N'OODDID%')
AND (IsNumeric(substring(tbl1.ID,5,LEN(tbl1.ID)-4)) = 1)
)
SELECT max(convert(bigint,number)) FROM T1 WHERE number < 1000000;
第二种类型转换是隐式的,因为1000000是数字。第一个是必要的。否则,它会认为“12346”大于“123421”。
字符串之间的比较只有在具有固定长度时才有效。
此致
答案 1 :(得分:1)
试试这个
select MAX(CAST(SUBSTRING(ID,5,9) as INT))+1
from tblMainBee
where
ID Like 'OODD%'
AND ID Not Like 'OODDid%'
AND ID Not Like '%x'
AND ISNUMERIC(SUBSTRING(ID,5,9))=1
AND CAST(SUBSTRING(ID,5,9) as INT)<1000000