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

6 cách để kết hợp một chuỗi và một số trong SQL Server

Nếu bạn đã từng cố gắng nối một chuỗi với một số trong khi sử dụng SQL Server, nhưng gặp lỗi, thì bài viết này sẽ giải đáp mọi thứ cho bạn. Có nhiều cách để thực hiện nối bằng T-SQL trong SQL Server và nếu bạn đang ghép các kiểu dữ liệu khác nhau (như một chuỗi và một số) thì bạn có thể gặp lỗi, tùy thuộc vào cách bạn thực hiện nối.

Điều cần nhớ khi nối các kiểu dữ liệu khác nhau là chúng cần được chuyển đổi thành cùng một kiểu dữ liệu trước. Cụ thể hơn, khi nối một chuỗi với một số, số đó sẽ cần phải được chuyển đổi thành một chuỗi trước khi nó có thể được nối với chuỗi. May mắn thay, SQL Server / T-SQL làm cho điều này trở nên dễ dàng.

Bài viết này trình bày sáu cách để nối chuỗi với số bằng T-SQL.

Hàm CONCAT ()

Cách rõ ràng nhất (và có thể là tốt nhất) để nối một chuỗi và một số là sử dụng CONCAT() hàm số. Điều này cho phép bạn cung cấp chuỗi và số dưới dạng hai đối số riêng biệt. Sau đó, SQL Server sẽ nối chúng và quá trình nối của bạn đã hoàn tất.

Ví dụ

SELECT CONCAT('Comments: ', 9) AS Result;

Kết quả:

Result     
-----------
Comments: 9

Như bạn có thể thấy, điều này hoạt động hoàn hảo. Chuỗi và số được trình bày dưới dạng một trường.

Lưu ý rằng bạn không bị giới hạn ở một chuỗi và một số - CONCAT() hàm có thể chấp nhận tối đa 254 đối số (tức là bạn có thể kết hợp tối đa 254 chuỗi / số với nhau.

Cũng lưu ý rằng CONCAT() chuyển đổi ngầm tất cả các đối số thành kiểu chuỗi trước khi nối. Ngoài ra, CONCAT() chuyển đổi ngầm mọi giá trị null thành chuỗi rỗng.

Hàm CONCAT_WS ()

Chúng ta có thể lấy ví dụ trước đó thêm một bước bằng cách sử dụng CONCAT_WS() hàm số. Hàm này cho phép bạn chỉ định dấu phân tách.

Để cung cấp một dấu phân tách, chỉ cần thêm nó làm đối số đầu tiên. Sau đó, chỉ định chuỗi và số làm đối số thứ hai và thứ ba.

SELECT CONCAT_WS(': ', 'Comments', 9) AS Result;

Kết quả:

Result     
-----------
Comments: 9

Lưu ý rằng hàm này không nhất thiết phải phù hợp để phân tách các cặp tên / giá trị, vì dấu phân cách được thêm vào giữa từng mục riêng lẻ được nối (vì vậy nó cũng sẽ được thêm vào giữa mỗi cặp trong trường hợp bạn có nhiều cặp). Trong trường hợp của chúng tôi, nó hoạt động tốt, vì chúng tôi chỉ có một cặp tên / giá trị để ghép.

Tuy nhiên, bạn luôn có thể lồng nhiều CONCAT_WS() các chức năng để trả về từ nối chính xác cho nhu cầu của bạn (để bạn có thể có một dấu phân tách khác nhau giữa mỗi cặp).

Hàm CONVERT ()

Nếu vì lý do nào đó bạn không thể (hoặc không muốn) sử dụng CONCAT() hoặc CONCAT_WS() , bạn có thể thực hiện nối bằng toán tử nối chuỗi (+ ). Khi sử dụng phương pháp này, bạn sẽ cần thực hiện bất kỳ chuyển đổi loại dữ liệu nào theo cách thủ công.

Một cách để chuyển đổi giữa các kiểu dữ liệu là sử dụng CONVERT() chức năng.

Dưới đây là cách bạn thực hiện việc này bằng cách sử dụng cùng dữ liệu từ các ví dụ trước:

SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;

Kết quả:

Result     
-----------
Comments: 9

Trong trường hợp này, tôi chuyển đổi số nguyên thành varchar (12), nhưng đây có thể là bất kỳ kiểu dữ liệu và độ dài nào bạn yêu cầu.

Hàm CAST ()

CAST() rất giống với hàm CONVERT() hàm số. Sự khác biệt chính là CAST() là ANSI tiêu chuẩn và CONVERT() dành riêng cho T-SQL. Đã nói rằng, CONVERT() có một số chức năng bổ sung, nhưng với mục đích của những ví dụ này, bạn có thể sử dụng một trong hai chức năng.

Đây là CAST() phiên bản sử dụng cùng dữ liệu từ các ví dụ trước:

SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;

Kết quả:

Result     
-----------
Comments: 9

Hàm TRY_CONVERT ()

Một vấn đề tiềm ẩn khi sử dụng CONVERT() chức năng là, nếu chuyển đổi không thành công, bạn sẽ gặp lỗi. Mặc dù điều này là tốt trong nhiều trường hợp, nhưng trong một số trường hợp, điều này có thể không được mong muốn. Trong những trường hợp như vậy, bạn có thể tìm thấy TRY_CONVERT() phù hợp hơn.

TRY_CONVERT() hàm chuyển đổi kiểu dữ liệu giống như CONVERT() chức năng nào. Tuy nhiên, nếu không thể chuyển đổi dữ liệu, thì dữ liệu đó sẽ trả về null .

Ví dụ:nếu chúng tôi cố gắng thực hiện những điều sau, chúng tôi gặp lỗi:

SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;

Kết quả:

Error: Arithmetic overflow error converting numeric to data type varchar.

Tuy nhiên, nếu chúng ta sử dụng TRY_CONVERT() , chúng tôi nhận được null :

SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;

Kết quả:

Result
------
null

Bạn có thể sử dụng lập trình có điều kiện trong trường hợp này để thực hiện một tác vụ khác tùy thuộc vào kết quả.

Hàm TRY_CAST ()

TRY_CAST() chức năng hoạt động theo cùng một cách. Nó chuyển đổi kiểu dữ liệu giống như CAST() hàm thì không, và nếu không thể chuyển đổi dữ liệu, thì nó sẽ trả về null .

Ví dụ:điều này tạo ra một lỗi:

SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;

Kết quả:

Error: Arithmetic overflow error converting numeric to data type varchar.

Nhưng nếu chúng ta sử dụng TRY_CAST() thay vào đó, chúng tôi nhận được null :

SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;

Kết quả:

Result
------
null

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về Chuyển đổi "date" thành "datetimeoffset" trong SQL Server (T-SQL)

  2. Danh sách phân cấp các loại sự kiện kích hoạt trong SQL Server 2019

  3. Các hàm do người dùng định nghĩa trong SQL Server

  4. Cách xuất kết quả truy vấn sang .csv hoặc Tệp được phân cách bằng tab trong SQL Server Management Studio (SSMS) - Hướng dẫn SQL Server / TSQL Phần 23

  5. 4 Chức năng để định dạng một số thành 2 vị trí thập phân trong SQL Server