Necesito encontrar el valor más alto de la base de datos que satisfaga una cierta convención de formato. En concreto, me gustaría encontrar el valor más alto que se parece aT-SQL IsNumeric() y Linq-to-SQL
EU999999 ('9' ser cualquier dígito)
select max (col) devolverá algo como 'EUZ ...' para instancia que quiero excluir. La siguiente consulta hace el truco, pero no puedo producir esto a través de Linq-to-SQL. Parece que no hay traducción para la función isnumeric() en SQL Server.
select max(col) from table where col like 'EU%'
and 1=isnumeric(replace(col, 'EU', ''))
Escribir una función de base de datos, procedimientos almacenados, o cualquier otra cosa de esa naturaleza es muy abajo en la lista de mis soluciones preferidas, ya que esta tabla es central en mi aplicación y no puede reemplazar fácilmente el objeto de tabla con otra cosa .
¿Cuál es la siguiente mejor solución?
Me gusta su sugerencia y la aceptaré, pero mi prefijo (y la longitud) no es una constante, por desgracia, así que tendría que generar la expresión de forma dinámica. Eso no me gusta, y estoy pensando en formas de cambiar el esquema para poder evitar esto. – cdonner
Una de las ventajas de utilizar un 'LIKE' sin comodín en la parte delantera es que es muy amigable con el índice (se puede realizar una comprobación de rango contra el índice). – Ruben
Una alternativa muy inteligente a IsNumeric en expresiones de longitud variable. Busque caracteres no numéricos en cualquier lugar de la cadena. ¡Gracias por el consejo! – BlueMonkMN