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

Sử dụng PARSENAME () để trả về một phần của tên đối tượng trong SQL Server

Trong SQL Server, bạn có thể sử dụng PARSENAME() hàm để trả về một phần của tên đối tượng.

Ví dụ:bạn có thể sử dụng nó để trả về phần lược đồ (hoặc bất kỳ phần nào khác) của tên bốn phần như server.schema.db.object .

Cú pháp

Cú pháp như sau:

PARSENAME ( 'object_name' , object_piece )

Nơi object_name là tên đối tượng (tùy chọn đủ điều kiện) và object_piece là phần mà bạn muốn trả lại.

object_piece đối số phải là int từ 1 đến 4. Giá trị xác định phần nào của tên đối tượng sẽ trả về. Các giá trị này tương ứng với phần đối tượng như sau:

Giá trị Phần đối tượng
1 Tên đối tượng
2 Tên giản đồ
3 Tên cơ sở dữ liệu
4 Tên máy chủ

Ví dụ 1 - Cách sử dụng cơ bản

Đây là một ví dụ để chứng minh.

SELECT PARSENAME('Homer.dbo.Music.Artists', 4) AS Result;

Kết quả:

+----------+
| Result   |
|----------|
| Homer    |
+----------+

Trong trường hợp này, tôi đã trả lại tên máy chủ từ tên đối tượng bốn phần bao gồm máy chủ, lược đồ, cơ sở dữ liệu và tên bảng.

Ví dụ 2 - Trả lại tất cả các bộ phận

Đây là giao diện nếu tôi trả lại tất cả các bộ phận một cách riêng biệt.

DECLARE @object_name char(23) = 'Homer.dbo.Music.Artists';
SELECT 
  PARSENAME(@object_name, 4) AS [Server],
  PARSENAME(@object_name, 3) AS [Schema],
  PARSENAME(@object_name, 2) AS [Database],
  PARSENAME(@object_name, 1) AS [Object];

Kết quả:

+----------+----------+------------+----------+
| Server   | Schema   | Database   | Object   |
|----------+----------+------------+----------|
| Homer    | dbo      | Music      | Artists  |
+----------+----------+------------+----------+

Ví dụ 3 - Máy chủ SQL không kiểm tra tên

Điều quan trọng cần biết là PARSENAME() không cho biết một đối tượng theo tên đã chỉ định có tồn tại hay không. Nó chỉ trả về phần được chỉ định từ tên đối tượng đã cho.

Do đó, bạn có thể chuyển bất kỳ giá trị nào cho hàm, miễn là giá trị của nó là sysname hợp lệ .

DECLARE @object_name char(28) = 'completely.bogus.object.name';
SELECT 
  PARSENAME(@object_name, 4) AS [Server],
  PARSENAME(@object_name, 3) AS [Schema],
  PARSENAME(@object_name, 2) AS [Database],
  PARSENAME(@object_name, 1) AS [Object];

Kết quả:

+------------+----------+------------+----------+
| Server     | Schema   | Database   | Object   |
|------------+----------+------------+----------|
| completely | bogus    | object     | name     |
+------------+----------+------------+----------+

Ví dụ 4 - Tên đối tượng ba phần

Đây là những gì sẽ xảy ra nếu tôi chuyển một tên gồm ba phần.

DECLARE @object_name char(17) = 'dbo.Music.Artists';
SELECT 
  PARSENAME(@object_name, 4) AS [Server],
  PARSENAME(@object_name, 3) AS [Schema],
  PARSENAME(@object_name, 2) AS [Database],
  PARSENAME(@object_name, 1) AS [Object];

Kết quả:

+----------+----------+------------+----------+
| Server   | Schema   | Database   | Object   |
|----------+----------+------------+----------|
| NULL     | dbo      | Music      | Artists  |
+----------+----------+------------+----------+

Ví dụ 5 - Tên đối tượng hai phần

Đây là những gì sẽ xảy ra nếu tôi chuyển một tên gồm hai phần.

DECLARE @object_name char(13) = 'Music.Artists';
SELECT 
  PARSENAME(@object_name, 4) AS [Server],
  PARSENAME(@object_name, 3) AS [Schema],
  PARSENAME(@object_name, 2) AS [Database],
  PARSENAME(@object_name, 1) AS [Object];

Kết quả:

+----------+----------+------------+----------+
| Server   | Schema   | Database   | Object   |
|----------+----------+------------+----------|
| NULL     | NULL     | Music      | Artists  |
+----------+----------+------------+----------+

Ví dụ 6 - Tên đối tượng một phần

Và, tưởng chừng như nó có vẻ ngớ ngẩn, một cái tên chỉ có một phần.

DECLARE @object_name char(7) = 'Artists';
SELECT 
  PARSENAME(@object_name, 4) AS [Server],
  PARSENAME(@object_name, 3) AS [Schema],
  PARSENAME(@object_name, 2) AS [Database],
  PARSENAME(@object_name, 1) AS [Object];

Kết quả:

+----------+----------+------------+----------+
| Server   | Schema   | Database   | Object   |
|----------+----------+------------+----------|
| NULL     | NULL     | NULL       | Artists  |
+----------+----------+------------+----------+

Ví dụ 7 - Tên đối tượng gồm năm phần

Đây là điều sẽ xảy ra nếu bạn cung cấp tên đối tượng có nhiều hơn bốn phần.

DECLARE @object_name char(23) = 'Oops.Homer.dbo.Music.Artists';
SELECT 
  PARSENAME(@object_name, 4) AS [Server],
  PARSENAME(@object_name, 3) AS [Schema],
  PARSENAME(@object_name, 2) AS [Database],
  PARSENAME(@object_name, 1) AS [Object];

Kết quả:

+----------+----------+------------+----------+
| Server   | Schema   | Database   | Object   |
|----------+----------+------------+----------|
| NULL     | NULL     | NULL       | NULL     |
+----------+----------+------------+----------+

Ví dụ 8 - Sử dụng Khác

Vì bạn có thể cung cấp tên đối tượng hoàn toàn không có thật, PARSENAME() có thể là một thủ thuật hữu dụng để chia nhỏ dữ liệu được phân tách khác, chẳng hạn như địa chỉ IP4.

DECLARE @object_name char(15) = '172.217.167.110';
SELECT 
  PARSENAME(@object_name, 4) AS [4],
  PARSENAME(@object_name, 3) AS [3],
  PARSENAME(@object_name, 2) AS [2],
  PARSENAME(@object_name, 1) AS [1];

Kết quả:

+-----+-----+-----+-----+
| 4   | 3   | 2   | 1   |
|-----+-----+-----+-----|
| 172 | 217 | 167 | 110 |
+-----+-----+-----+-----+

Tuy nhiên, nếu bạn thực sự cần làm điều này, hãy xem xét sử dụng một phương pháp khác, chẳng hạn như STRING_SPLIT() .

Ví dụ 9 - Dấu phẩy và các dấu phân cách khác

Đã cho PARSENAME() nhằm mục đích sử dụng với tên đối tượng, bạn không thể sử dụng dấu phẩy làm dấu phân cách và mong nó hoạt động giống nhau.

Đây là những gì sẽ xảy ra nếu tôi cố gắng làm điều đó.

DECLARE @object_name char(23) = 'Homer,dbo,Music,Artists';
SELECT 
  PARSENAME(@object_name, 4) AS [Server],
  PARSENAME(@object_name, 3) AS [Schema],
  PARSENAME(@object_name, 2) AS [Database],
  PARSENAME(@object_name, 1) AS [Object];

Kết quả:

+----------+----------+------------+-------------------------+
| Server   | Schema   | Database   | Object                  |
|----------+----------+------------+-------------------------|
| NULL     | NULL     | NULL       | Homer,dbo,Music,Artists |
+----------+----------+------------+-------------------------+

Bạn cần thay thế dấu phẩy bằng dấu chấm nếu bạn muốn làm điều đó hoặc sử dụng một phương pháp khác, chẳng hạn như STRING_SPLIT() .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn SQL để chọn một chuỗi giữa hai chuỗi đã biết

  2. HIỂN THỊ TẤT CẢ dữ liệu ngày giữa hai ngày; nếu không có hàng nào tồn tại cho ngày cụ thể thì hiển thị số 0 trong tất cả các cột

  3. xác định bộ ký tự của một bảng / cơ sở dữ liệu?

  4. Cách thay thế các giá trị Null bằng Không xác định trong Câu lệnh Chọn trong SQL Server - Hướng dẫn SQL Server / TSQL Phần 111

  5. Viết một số có hai chữ số thập phân SQL Server