Tôi cần tìm giá trị cao nhất từ cơ sở dữ liệu đáp ứng một quy ước định dạng nhất định. Cụ thể, tôi muốn tìm giá trị cao nhất mà trông giống nhưT-SQL IsNumeric() và LINQ-to-SQL
EU999999 ('9' là bất kỳ chữ số)
chọn max (col) sẽ trở lại một cái gì đó như 'EUZ ...' cho ví dụ mà tôi muốn loại trừ. Truy vấn sau thực hiện thủ thuật, nhưng tôi không thể tạo ra điều này thông qua LINQ-to-SQL. Dường như không có bản dịch cho hàm isnumeric() trong SQL Server.
select max(col) from table where col like 'EU%'
and 1=isnumeric(replace(col, 'EU', ''))
Viết một chức năng cơ sở dữ liệu, thủ tục lưu trữ, hoặc bất cứ thứ gì của thiên nhiên mà còn lâu mới xuống danh sách các giải pháp ưa thích của tôi, bởi vì bảng này là trung tâm ứng dụng của tôi và tôi không thể dễ dàng thay thế các đối tượng bảng với cái gì khác .
Giải pháp tốt nhất tiếp theo là gì?
Tôi thích đề xuất của bạn và tôi chấp nhận nó, nhưng tiền tố của tôi (và chiều dài) không phải là hằng số, thật không may, vì vậy tôi sẽ phải tạo biểu thức động. Điều đó tôi không thích, và tôi đang nghĩ về cách thay đổi lược đồ để tôi có thể giải quyết vấn đề này. – cdonner
Một trong những ưu điểm của việc sử dụng 'LIKE' không có ký tự đại diện ở mặt trước là điều này rất thân thiện với chỉ mục (có thể kiểm tra phạm vi với chỉ mục). – Ruben
Cách thay thế rất thông minh đối với IsNumeric trên các biểu thức có độ dài thay đổi. Tìm ký tự không phải số ở bất kỳ đâu trong chuỗi. Cảm ơn vì tiền hỗ trợ! – BlueMonkMN