我需要从数据库中找到满足特定格式约定的最高值。具体来说,我想找到看起来像的最高值
EU999999(“9”是任意数字)
select max(col) 将返回类似“EUZ...”的内容,例如我想排除的内容。
以下查询可以解决问题,但我无法通过 Linq-to-SQL 生成此查询。 SQL Server 中似乎没有对 isnumeric() 函数的翻译。
select max(col) from table where col like 'EU%'
and 1=isnumeric(replace(col, 'EU', ''))
编写数据库函数、存储过程或任何其他此类性质的内容远远不在我的首选解决方案列表中,因为该表是我的应用程序的核心,我无法轻松地用其他内容替换表对象。
下一个最佳解决方案是什么?
虽然ISNUMERIC
丢失了,你总是可以尝试几乎等效的NOT LIKE '%[^0-9]%
,即字符串中没有非数字,或者字符串为空或仅由数字组成:
from x in table
where SqlMethods.Like(x.col, 'EU[0-9]%') // starts with EU and at least one digit
&& !SqlMethods.Like(x.col, '__%[^0-9]%') // and no non-digits
select x;
当然,如果你知道位数是固定的,这可以简化为
from x in table
where SqlMethods.Like(x.col, 'EU[0-9][0-9][0-9][0-9][0-9][0-9]')
select x;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)