Potrzebuję znaleźć najwyższą wartość z bazy danych, która spełnia pewną konwencję formatowania. Konkretnie chciałbym znaleźć najwyższą wartość, która wygląda jakT-SQL IsNumeric() i Linq-to-SQL
EU999999 ('9' jest dowolna cyfra)
select max (COL) powróci coś jak 'EUZ ...' dla wystąpienie, które chcę wykluczyć. Poniższe zapytanie wykonuje sztuczkę, ale nie mogę tego zrobić przez Linq-SQL. Wydaje się, że nie ma tłumaczenia dla funkcji isnumeric() w SQL Server.
select max(col) from table where col like 'EU%'
and 1=isnumeric(replace(col, 'EU', ''))
Napisanie funkcji bazy danych, procedury składowanej lub cokolwiek innego o takim charakterze jest daleko na liście moich korzystnych rozwiązań, ponieważ tabela ta ma zasadnicze znaczenie dla mojej aplikacji i nie można łatwo zastąpić obiekt tabeli z czegoś innego .
Jakie jest następne najlepsze rozwiązanie?
Podobają mi się twoje sugestie i zaakceptuję je, ale mój prefiks (i długość) nie jest stały, niestety, więc musiałbym generować wyrażenie dynamicznie. To mi się nie podoba i myślę o sposobach zmiany schematu, abym mógł obejść to. – cdonner
Jedną z zalet używania 'LIKE' bez symbolu wieloznacznego na froncie jest to, że jest bardzo przyjazny dla indeksu (można dokonać sprawdzenia zakresu względem indeksu). – Ruben
Bardzo sprytna alternatywa dla IsNumeric w wyrażeniach o zmiennej długości. Szukaj nigdzie liczby w łańcuchu. Dzięki za wskazówkę! – BlueMonkMN