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

SQL Server 2008 chuyển kiểu dữ liệu làm tham số cho hàm

Chà, không có TRY_CONVERT() hoặc TRY_CAST() trong SQL-Server 2008, nhưng bạn có thể sử dụng các khuôn bên trong của XML thành các kiểu vô hiệu.

Hãy thử điều này

DECLARE @tbl TABLE(SomeInt VARCHAR(100));
INSERT INTO @tbl VALUES('123')
                      ,('blah') --bad data
SELECT t.*
      ,CAST('' AS XML).value('sql:column("t.SomeInt") cast as xs:int?','int')
FROM @tbl t;

Hơi bị hack ... Nhưng đẹp bằng cách nào đó;-)

Một số giải thích

CAST('' AS XML) chỉ là một thủ thuật để có được một XML thực sự để sử dụng các phương thức gốc của XML. sql:column() là một XQuery -function, cho phép bạn bao gồm cột của một tập hợp vào XQuery (sử dụng sql:variable cho các biến).

cast as xs:int? sẽ cố gắng phân tích cú pháp chuỗi dưới dạng giá trị int và sẽ trả về NULL nếu điều này không hoạt động.

Giới hạn là:Điều này sẽ luôn sử dụng mặc định của hệ thống của bạn (tương tự như TRY_CAST ). Với TRY_CONVERT bạn sẽ có nhiều quyền kiểm soát hơn đối với đầu ra với thông số thứ ba ...

Gợi ý:XQuery/Xpath phân biệt chữ hoa chữ thường. Vì vậy, có xs:dateTime? , nhưng bạn sẽ gặp lỗi với xs:datetime ...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Trigger:Hiểu biết và Các giải pháp thay thế

  2. SQL Server thêm khóa chính tăng tự động vào bảng hiện có

  3. Di chuyển cơ sở dữ liệu hệ thống trong cụm chuyển đổi dự phòng máy chủ SQL

  4. SQL Server:trả về tên cột dựa trên giá trị của bản ghi

  5. Phân tích cú pháp XML - Ký tự XML không hợp lệ (khi thực thi thủ tục được lưu trữ, việc chạy các truy vấn thủ tục không dẫn đến lỗi)