Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Chuyển đổi chuỗi thành int trong linq thành các thực thể trên cơ sở dữ liệu lớn

Tôi nghĩ rằng việc so sánh dưới dạng chuỗi khá an toàn, trừ khi bạn có năm <1000 hoặc> 9999:

... dr.stringYear.CompareTo(myNumberString) > 0

EF dịch điều này thành một vị từ SQL như

WHERE [alias].[stringYear] > @p

có thể trong SQL nhưng không thể trong C #.

Một lợi thế là bất kỳ chỉ mục nào trên stringYear có thể được sử dụng trong một kế hoạch thực thi. Chuyển đổi stringYear để đánh số loại bỏ bất kỳ chỉ mục nào.

Phương thức này vẫn hữu ích khi cột chuỗi chứa các giá trị chuỗi răng cưa. Trong trường hợp như vậy, vị từ nên được kết hợp với Độ dài. Ví dụ:để tìm tất cả các thực thể trong đó bất kỳ chuỗi số nào dưới dạng số nguyên đều lớn hơn một số giá trị tham chiếu

var len = myNumberString.Lenght;

var query = 
    from row in context.LegacyTable
    where row.NumericString.CompareTo(myNumberString) > 0
       && row.NumericString.Length >= len
    select row; 

Sau đó, công cụ truy vấn không thể sử dụng các chỉ mục để so sánh độ dài nhưng nó có thể làm như vậy cho > so sánh.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-Sql dường như đang đánh giá câu lệnh If ngay cả khi điều kiện không đúng

  2. Cột xung đột với loại cột khác trong danh sách bỏ chia

  3. Cách hiển thị thanh tiến trình trong khi thực thi VB.Net SQLCommand lớn

  4. Các thẻ tự đóng trong XML trong SQL Server

  5. Có cách nào để không sử dụng dấu ngoặc vuông trong SQL Server không?