我需要从数据库中找到满足特定格式约定的最高值.具体来说,我想找到最高的价值
EU999999 (‘9’ being any digit)
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;