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

Phần đệm bên trái trong SQL Server - 3 LPAD () Tương đương

Nếu bạn sử dụng Cơ sở dữ liệu Oracle hoặc MySQL, bạn đủ may mắn để có LPAD()RPAD() các hàm, cho phép bạn chèn một chuỗi với một ký tự (hoặc các ký tự) nhất định vào bên trái và / hoặc bên phải của nó.

Tuy nhiên, SQL Server (hay chính xác hơn là T-SQL), không bao gồm các chức năng này. Vì vậy, nếu bạn cần một số khoảng đệm bên trái, bạn sẽ cần phải ứng biến.

Bài viết này trình bày bốn tùy chọn để đệm một số bằng các số không ở đầu trong SQL Server. Vì vậy, bạn có thể làm những việc như lần lượt 7 thành 007 . Ba trong số các tùy chọn này hoạt động trên chuỗi, vì vậy bạn cũng có thể áp dụng phần đệm cho dữ liệu văn bản.

Phương pháp 1 - Sử dụng hàm FORMAT ()

Nếu bạn cần áp dụng các số 0 ở đầu cho một số, thì tùy chọn này sẽ là tất cả những gì bạn cần. Tùy chọn này sử dụng FORMAT() hàm số. Hàm này trả về số dưới dạng chuỗi ở định dạng được chỉ định của chúng tôi:

SELECT FORMAT(7, '000');

Kết quả:

007

Trong trường hợp này, chúng tôi sử dụng 0 định dạng định dạng để định dạng số với các số 0 ở đầu nếu có. Đây chỉ là một trong nhiều mã định dạng tùy chỉnh. Các chỉ định định dạng tùy chỉnh cho phép chúng tôi rất chính xác về cách số của chúng tôi được định dạng.

Lưu ý rằng FORMAT() hàm chỉ dành cho số và giá trị ngày giờ. Vì vậy, nếu bạn cần áp dụng đệm cho một chuỗi thực tế, hãy đọc tiếp.

Phương pháp 2 - Sử dụng hàm RIGHT ()

Phương thức thứ hai sử dụng RIGHT() hàm để chỉ trả về phần ngoài cùng bên phải của chuỗi, sau khi thêm một số số 0 ở đầu.

Mặc dù tôi đang áp dụng các số 0 ở đầu cho một “số” ở đây, nhưng nó thực sự là một biểu diễn chuỗi của một số. Vì vậy, nếu bạn cần áp dụng đệm cho một chuỗi thay vì một số, thì phương pháp này sẽ hoạt động.

SELECT RIGHT('000' + '1234', 7);

Kết quả:

0001234

7 chỉ định kết quả cuối cùng phải có bao nhiêu ký tự (sau khi các số không đã được thêm vào).

Giảm độ dài

Vì vậy, nếu chúng ta giảm con số đó, nó sẽ giảm số lượng các số 0 ở đầu:

SELECT RIGHT('000' + '1234', 6);

Kết quả:

001234

Tăng chiều dài

Nhưng nếu chúng tôi tăng số lượng, chúng tôi cần đảm bảo rằng chúng tôi đã chỉ định đủ số 0 để tạo nên độ dài cần thiết:

SELECT RIGHT('000000' + '1234', 10);

Kết quả:

0000001234

Nếu không, chúng tôi kết thúc với điều này:

SELECT RIGHT('000' + '1234', 10);

Kết quả:

0001234

Cắt ngắn số

Cũng lưu ý rằng nếu bạn không chỉ định đủ ký tự cho độ dài chuỗi kết quả, số sẽ bị cắt và bạn sẽ chỉ nhận được phần ngoài cùng bên phải của số:

SELECT RIGHT('000' + '1234', 2);

Kết quả:

34

Vì vậy, trong trường hợp này, số ban đầu đã bị cắt bớt cộng với các số 0 ở đầu bị bỏ qua.

Đây là một tình huống mà kết quả khác với kết quả của MySQL và LPAD() của Oracle hàm số. Hàm đó sẽ tạo ra 2 chữ số đầu tiên (không được đánh dấu) thay vì 2 chữ số cuối cùng. Như thế này:

SELECT LPAD(1234, 2, 0);

Kết quả:

12

Nếu bạn cần một giải pháp SQL Server sẽ hoạt động như LPAD() trong những trường hợp như vậy, hãy thử cách này:

SELECT RIGHT(REPLICATE('0', 3) + LEFT('1234', 2), 2);

Kết quả:

12

Mặc dù, hãy nhớ rằng bạn sẽ nhận được cùng một kết quả chỉ bằng cách sử dụng LEFT() chức năng của chính nó:

SELECT LEFT('1234', 2);

Kết quả:

12

Thêm vào đó, tôi đang đấu tranh để nghĩ ra lý do tại sao bất kỳ ai cũng muốn cắt ngắn số (vì họ đang cố gắng bổ sung), nhưng ít nhất đây là điều cần xem xét.

Phương pháp 3 - Sử dụng kết hợp RIGHT () và REPLICATE ()

Phương pháp này gần giống như phương pháp trước, với sự khác biệt duy nhất là tôi chỉ cần thay thế ba số không bằng REPLICATE() chức năng:

SELECT RIGHT(REPLICATE('0', 3) + '1234', 7);

Kết quả:

0001234

REPLICATE() hàm giúp bạn không phải gõ ra từng số 0 (hoặc ký tự khác) nhiều lần.

Phương pháp thưởng:Phương pháp 4 - Sử dụng kết hợp REPLACE () và STR ()

Phương pháp này xuất phát từ một góc độ hoàn toàn khác với các phương pháp trước đây:

SELECT REPLACE(STR('1234', 6),' ','0');

Kết quả:

001234

Ở đây chúng tôi sử dụng REPLACE() kết hợp với STR() hàm để chuyển đổi một số thành một chuỗi có độ dài cụ thể, sau đó chuyển đổi bất kỳ ký tự khoảng trắng nào thành số không.

Một điều cần cẩn thận là, nếu bạn cắt ngắn số (như chúng ta đã làm trong ví dụ trước), bạn sẽ kết thúc bằng một loạt dấu hoa thị thay vì số (rút gọn):

SELECT REPLACE(STR('1234', 2),' ','0');

Kết quả:

**

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cải thiện điều chỉnh hiệu suất SQL Server với 3 mẹo sau

  2. Khắc phục “Lỗi tràn số học chuyển đổi int thành kiểu dữ liệu số” trong SQL Server

  3. Kết quả SQL động vào bảng tạm thời trong thủ tục SQL Stored

  4. Triển khai LocalDB trên PC khách

  5. Cách chỉnh sửa tùy chọn máy chủ được liên kết bằng T-SQL