Hàm STRING_SPLIT trong SQL Server – chia nhỏ trong ms sql

Bài đăng trên blog này sẽ đề cập đến hàm STRING_SPLIT trong SQL Server bao gồm tổng quan và các ví dụ sử dụng chi tiết.

Bạn đang xem : chia nhỏ trong ms sql

Bài viết này sẽ trình bày về hàm STRING_SPLIT trong SQL Server bao gồm tổng quan và các ví dụ sử dụng chi tiết.

Người dùng SQL Server thường cần các hàm thao tác và phân tích cú pháp chuỗi. Trong một số trường hợp, thao tác phân tích cú pháp hoặc thao tác chuỗi này có thể rất khó khăn cho các nhà phát triển hoặc quản trị viên cơ sở dữ liệu. Vì lý do này, trong mỗi phiên bản SQL Server, Microsoft đã công bố các hàm chuỗi mới. Các hàm chuỗi mới như STRING_ESCAPE, STRING_SPLIT đã được thêm vào SQL Server 2016 và các hàm chuỗi CONCAT_WS, STRING_AGG, TRANSLATE, TRIM đã được thêm vào SQL Server 2017.

Trong bài viết này, chúng ta sẽ thảo luận cụ thể về hàm STRING_SPLIT. Mục đích của hàm chuỗi tích hợp này là chuyển đổi mảng chuỗi thành cột được phân tách bằng bất kỳ dấu phân cách nào. Hình dưới đây minh họa ý tưởng chính của chức năng này.

Như chúng tôi đã lưu ý trong phần nhập của bài viết, chức năng này đã được giới thiệu trong SQL Server 2016 và các phiên bản SQL Server trước không hỗ trợ chức năng tích hợp này. Nói cách khác, chức năng này không hỗ trợ dưới mức tương thích 130. Bảng sau minh họa các phiên bản của SQL Server và mức độ tương thích của chúng.

Phiên bản máy chủ SQL

Mức độ tương thích

Bản xem trước SQL Server 2019

150

SQL Server 2017 (14.x)

140

SQL Server 2016 (13.x)

130

SQL Server 2014 (12.x)

120

SQL Server 2012 (11.x)

110

SQL Server 2008 R2

100

SQL Server 2008

100

SQL Server 2005 (9.x)

90

SQL Server 2000

80

Bây giờ, chúng ta hãy bắt đầu thảo luận về các khái niệm sử dụng và các chi tiết khác của chức năng này.

Cú pháp:

Cú pháp rất đơn giản vì hàm tích hợp sẵn có giá trị bảng này chỉ nhận hai tham số. Cái đầu tiên là một chuỗi và cái thứ hai là một ký tự đơn.

STRING_SPLIT (chuỗi, dấu phân tách)

Ví dụ sau đây cho thấy cách sử dụng đơn giản nhất của chức năng này.

1

chọn

giá trị

từ

STRING_SPLIT

(

‘táo, chuối, chanh, kiwi, cam, dừa’

,

‘,’

< p class = "crayon-sy">)

Truy vấn SELECT sau sẽ trả về lỗi do mức độ tương thích của cơ sở dữ liệu.

1

2

3

4

5

ALTER

CƠ SỞ DỮ LIỆU

AdventureWorks2012

BỘ

tương thích_LEVEL

=

120

ĐI

chọn

giá trị

từ < / p>

STRING_SPLIT

(

‘táo, chuối, chanh, kiwi, cam, dừa’

,

‘ , ‘

)

Lý do cho lỗi này là chúng tôi đã giảm mức độ tương thích cơ sở dữ liệu dưới 130 và SQL Server trả về lỗi. Hãy nhớ rằng nếu bạn định sử dụng chức năng này trong môi trường khách hàng của mình, bạn phải chắc chắn về mức độ tương thích cơ sở dữ liệu của họ.

STRING_SPLIT và mệnh đề WHERE:

Thông qua mệnh đề WHERE, chúng ta có thể lọc tập kết quả của hàm STRING_SPLIT. Trong câu lệnh select sau đây, mệnh đề WHERE sẽ lọc tập kết quả của hàm và sẽ chỉ trả về hàng hoặc các hàng bắt đầu bằng “le”

1

2

3

4

chọn

value

từ

STRING_SPLIT

(

‘táo, chuối, chanh, kiwi, cam, dừa’

,

‘,’ < / p>

)

WHERE

value < / p>

THÍCH

‘le%’

Ngoài ra, chúng ta có thể sử dụng hàm trong biểu mẫu này:

1

2

3

4

5

6

SỬ DỤNG

Xem Thêm  Thay đổi giá trị từ điển trong Python - python thay đổi giá trị dict

AdventureWorks2014

ĐI

chọn

*

từ

HumanResources

.

Nhân viên

WHERE

[

jobtitle

]

Tôi N

(

chọn

giá trị

từ

string_split

(

‘Giám đốc điều hành, Kỹ sư thiết kế’

,

‘,’

)

)

Bây giờ, chúng ta sẽ xem xét kế hoạch thực thi với sự trợ giúp của ApexSQL Plan . Chúng ta có thể thấy toán tử hàm có giá trị Bảng trong kế hoạch thực thi.

Khi chúng ta di chuột qua toán tử hàm có giá trị bảng trong kế hoạch thực thi, chúng ta có thể tìm hiểu tất cả các chi tiết về toán tử này. Dưới nhãn đối tượng, có thể thấy hàm STRING_SPLIT. Tất cả các chi tiết này cho chúng ta biết rằng hàm này là một hàm có giá trị bảng.

STRING_SPLIT và ĐẶT HÀNG BỞI

Một yêu cầu khác mà chúng ta cần trong các câu lệnh SELECT là chức năng sắp xếp. Chúng ta có thể sắp xếp đầu ra của hàm này giống như các câu lệnh T-SQL khác.

1

2

3

4

chọn

value

từ

STRING_SPLIT

(

‘táo, chuối, chanh, kiwi, cam, dừa’

,

‘,’

)

đặt hàng

bởi

value

Lưu ý : Khi tôi xem xét một số phản hồi của khách hàng về SQL Server, tôi đã gặp đề xuất về hàm STRING_SPLIT là “Chức năng tách chuỗi mới trong SQL Server 2016 là một bổ sung tốt nhưng nó cần một cột bổ sung, một cột ListOrder biểu thị thứ tự của các giá trị phân tách.” Theo suy nghĩ của tôi, tính năng này có thể rất hữu ích cho chức năng này và tôi đã bỏ phiếu cho gợi ý này.

STRING_SPLIT và THAM GIA:

Chúng ta có thể kết hợp tập kết quả của hàm vào bảng khác với mệnh đề JOIN.

1

2

3

4

5

6

7

8

9

10

11

12

SỬ DỤNG

[

AdventureWorks2014

]

ĐI

CHỌN

< p class = "crayon-sy"> [

PersonType

]

,

[

NameStyle

]

< p class = "crayon-line" id = "urvanov-s yntax-highlighter-62bd87d388a1f440117496-7 ">

,

[< / p>

FirstName

]

,

[

MiddleName

]

,

[

LastName

]

TỪ

[

Người

]

.

[

Người

]

P

INNER

THAM GIA

string_split

(

‘ Ken, Terri, Gail ‘

,

‘, ‘

)

bật

< p class = "crayon-h">

P

.

FirstName

=

value

Ngoài ra, chúng ta có thể sử dụng hàm ÁP DỤNG CROSS để kết hợp tập kết quả của hàm STRING_SPLIT với các bảng khác. Chức năng ÁP DỤNG CHÉO cung cấp cho chúng ta kết nối đầu ra của hàm giá trị bảng với các bảng khác.

Trong mẫu sau, chúng tôi sẽ tạo hai bảng và bảng đầu tiên (#Countries) tên cửa hàng và lục địa của các quốc gia và bảng thứ hai (#CityList) lưu trữ bảng thành phố của các quốc gia nhưng điểm quan trọng là bảng #CityList lưu trữ tên thành phố dưới dạng mảng chuỗi được phân tách bằng dấu phẩy. Chúng tôi sẽ nối điều này vào bảng qua các cột quốc gia và sử dụng hàm ÁP DỤNG CHÉO để chuyển mảng thành phố thành một cột. Hình ảnh dưới đây có thể minh họa những gì chúng tôi sẽ làm.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

THẢ

BẢNG

NẾU

TỒN TẠI

#

Các quốc gia

ĐI

THẢ

< / p>

BẢNG

NẾU

TỒN TẠI

#

CityList

ĐI

TẠO

BẢNG

#

Các quốc gia

(

Lục địa

VARCHAR

(

100

)

,

Quốc gia

BIẾN HÌNH

(

100

)

)

ĐI

TẠO

BẢNG

#

CityList

(

Quốc gia

VARCHAR

(

100

)

,

Thành phố

BIẾN HÌNH

(

5000

)

)

ĐI

CHÈN

VÀO

#

Quốc gia

GIÁ TRỊ

(

‘Châu Âu’

,

‘Pháp’

)

< p class = "crayon-sy">,

(

‘Châu Âu’

,

‘Đức’

)

CHÈN

VÀO

#

CityList

GIÁ TRỊ

(

‘Pháp’

,

‘Paris, Marsilya, Lyon, Lille, Nice’

< p class = "crayon-sy">)

,

(

‘ Đức ‘

,

‘ Berlin, Hamburg, Munih, Frankfurt, Koln ‘

)

CHỌN

CN

. < / p>

Lục địa

,

CN

.

Quốc gia

,

giá trị

FROM

#

CityList

CL

CROSS

Xem Thêm  Tham chiếu HTML UTF-8 - đặt unicode trong html

ÁP DỤNG

string_split

(

CL

.

Thành phố

,

‘,’

) < / p>

INNER

THAM GIA

#

Quốc gia

CN

BẬT

CL

.

Quốc gia

=

CN

.

Quốc gia

< / p>

THẢ

BẢNG

NẾU

TỒN TẠI

#

Quốc gia

ĐI

THẢ

BẢNG

NẾU

TỒN TẠI

# < p class = "crayon-i"> CityList

ĐI

Thêm chi tiết về STRING_SPLIT

Sau khi tất cả các phương pháp sử dụng cơ bản của chức năng này; chúng tôi sẽ đi sâu vào chi tiết hơn. Trong các ví dụ trước, chúng ta luôn sử dụng dấu phẩy (,) làm dấu phân tách cho hàm, tuy nhiên, chúng ta có thể cần sử dụng các ký hiệu khác làm dấu phân cách. Hàm STRING_SPLIT cho phép chúng tôi sử dụng các ký hiệu khác làm dấu phân tách, nhưng nó có một giới hạn về cách sử dụng này. Theo MSDN; dấu phân tách là một kiểu dữ liệu duy nhất và kiểu dữ liệu tham số này có thể là nvarchar (1), char (1) và varchar (1). Bây giờ, chúng ta sẽ làm một mẫu về nó. Câu lệnh SELECT sau sẽ chạy mà không có lỗi. Cũng như chúng ta sẽ sử dụng tại (@) thay vì dấu phẩy (,).

1

2

3

KHAI BÁO

@

DANH SÁCH DANH SÁCH

NHƯ

VARCHAR

(

1000

)

=

‘táo, chuối, chanh, kiwi, cam, dừa’

KHAI BÁO

@

SEPERATOR

VARCHAR

(

1

)

=

‘,’

chọn

*

từ

STRING_SPLIT

(

@

STRINGLIST

,

@

SEPERATOR

)

Tuy nhiên, câu lệnh SELECT sau sẽ trả về lỗi do khai báo kiểu dữ liệu.

1

2

3

KHAI BÁO

@

DANH SÁCH DANH SÁCH

NHƯ

VARCHAR

(

1000

)

=

‘apple @ + @ banana @ + @ chanh @ + @ kiwi @ + @ orange @ + @ dừa’

KHAI BÁO

@

SEPERATOR

VARCHAR

(

3

)

=

‘@ + @’

chọn

*

từ

STRING_SPLIT

(

@

DANH SÁCH STRING

,

@

SEPERATOR

)

“Thủ tục mong đợi tham số‘ phân tách ’kiểu‘ nchar (1) / nvarchar (1) ’”. Định nghĩa về lỗi rất rõ ràng và nó chỉ ra một vấn đề liên quan đến kiểu dữ liệu của dấu phân tách. Sau mẫu này, một câu hỏi có thể xuất hiện trong đầu bạn. Chúng ta có thể gán giá trị NULL cho dấu phân cách không? Chúng tôi sẽ kiểm tra và học hỏi.

1

2

3

KHAI BÁO

@

DANH SÁCH DANH SÁCH

NHƯ

VARCHAR

(

1000

)

=

‘táo, chuối, chanh, kiwi, cam, dừa’

KHAI BÁO

@

SEPERATOR

VARCHAR

(

1

)

=

NULL

chọn

*

từ

STRING_SPLIT

(

@

STRINGLIST

,

@

SEPERATOR

)

Chúng tôi không thể gán giá trị NULL cho dấu phân tách dưới dạng một giá trị.

Ngoài ra, khi chúng ta sử dụng hàm này cho các giá trị số, tập kết quả sẽ ở dạng dữ liệu chuỗi. Khi chúng tôi thực hiện truy vấn sau, chúng tôi có thể xem tất cả các chi tiết và kết quả là kiểu dữ liệu bảng đã đặt.

1

2

3

4

5

6

7

8

9

THẢ

BẢNG

NẾU

TỒN TẠI

TempStringSplit

CHỌN

VALUE

VÀO

TempStringSplit

TỪ

< / p>

string_split

(

‘1,2,3’

,

‘,’

)

NHƯ

StrSplit

CHỌN

TABLE_NAME

,

COLUMN_NAME

,

COLUMN_DEFAULT

,

DATA_TYPE

,

< p class = "crayon-i"> CHARACTER_MAXIMUM_LENGTH

TỪ

INFORMATION_SCHEMA

< p class = "crayon-sy">.

CỘT

trong đó

TABLE_NAME

=

‘TempStringSplit’

THẢ

BẢNG

< p class = "crayon-h">

NẾU

HIỆN TẠI

TempStringSplit

Bây giờ chúng ta sẽ phân tích kế hoạch thực thi truy vấn sau đây với ApexSQL Plan.

1

2

3

4

5

6

7

8

9

10

THẢ

BẢNG

NẾU

TỒN TẠI

TempNumerical

ĐI

TẠO

BẢNG

TempNumerical

(

NumberId < / p>

INT

)

INSER T

VÀO

Số

GIÁ TRỊ

(

1

)

,

(

2

)

,

(

3

)

,

(

5

)

< p class = "crayon-i"> ĐI

CHỌN

*

< p cla ss = "crayon-k"> TỪ

Số

INNER

THAM GIA

string_split

(

‘1,2,3’

,

‘,’

)

AS

StrSplit

BẬT

Số

.

NumberId

=

StrSplit

.

giá trị

Trong toán tử đã chọn, bạn đang thấy một dấu hiệu cảnh báo và bây giờ hãy tìm hiểu chi tiết về cảnh báo này.

Lý do cho cảnh báo này là chúng tôi đã cố gắng nối kiểu dữ liệu số nguyên với kiểu dữ liệu varchar, vì vậy kiểu sử dụng này gây ra chuyển đổi ngầm định. Chuyển đổi ngầm ảnh hưởng đến truy vấn hiệu suất.

Xem Thêm  Những hình ảnh thiên nhiên phong cảnh đẹp như tranh vẽ [Full HD]

Kết luận

Trong bài viết này, chúng tôi đã đề cập đến các phương pháp sử dụng và tất cả các khía cạnh của hàm STRING_SPLIT. Hàm này có cách sử dụng rất cơ bản và nó giúp chuyển đổi mảng thành cột. Ngoài ra, khi chúng tôi so sánh chức năng tích hợp này với các chức năng khác do khách hàng xác định, nó cải thiện đáng kể hiệu suất của các truy vấn.


Xem thêm những thông tin liên quan đến chủ đề chia nhỏ trong ms sql

How to Reduce/Shrink LDF File Size using SQL Management Studio

  • Tác giả: Networking Bit
  • Ngày đăng: 2019-06-23
  • Đánh giá: 4 ⭐ ( 9027 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: In this tutorial, we will teach you how How to shrink the transaction log

    If you found this video valuable, give it a like.
    If you know someone who needs to see it, share it.
    Leave a comment below with your thoughts.
    Add it to a playlist if you want to watch it later.

    Subscribe Here:https://www.youtube.com/networkingbitsabbirkhan

    **Follow me Socially 😀

    Sabbir Ahmed Khan- https://goo.gl/dMwKcM (FB)
    For more Tips Tutorial- http://networkingbit.info

    **Facebook page: https://goo.gl/drRSZ3

    **Twitter : https://goo.gl/mxp7Au

    **Google+ : https://goo.gl/pfkggD

    **LIKE ➡ SHARE ➡ SUBSCRIBE
    Please Like, Subscribe and Share our tutorials 🙂

Tools chia nhỏ database

  • Tác giả: blog.nguyenanhung.com
  • Đánh giá: 3 ⭐ ( 3129 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Tool SQLDumpSplitter dùng để chia nhỏ file *.sql với dung lượng lớn.

Tổng hợp các hàm xử lý chuỗi trong MS SQL Server

  • Tác giả: laptrinhvb.net
  • Đánh giá: 3 ⭐ ( 4683 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Mình làm một bài viết về danh sách các hàm hệ thống xử lý chuỗi trong SQL. Danh sách các hàm xử lý n&

Chia và mở rộng nhiều cột trong MS SQL Server

  • Tác giả: helpex.vn
  • Đánh giá: 3 ⭐ ( 3523 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: MS SQL Server, Hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS), được sử dụng để lưu trữ và truy xuất dữ liệu. Tính toàn vẹn của dữ liệu, tính nhất quán của dữ liệu và sự bất thường của dữ…

Phần mềm chia nhỏ sql

  • Tác giả: www.hoangweb.com
  • Đánh giá: 3 ⭐ ( 7185 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

MS SQL với C#: Cách chia database thành nhiều database nhỏ (CSDL Phân tán)

  • Tác giả: diendan.congdongcviet.com
  • Đánh giá: 3 ⭐ ( 1001 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Mọi người cho mình hỏi? mình không dám chắc là câu hỏi của mình có phải là dạng csdl phân tán hay không, nhưng vấn đề cụ thể của mình như sau
    1. Mình có cái mô hình như sau
    27062
    Hiện tại thì các phần mềm của mình đang sử dụng theo cách là mỗi 1 ứng dụng 1 database, và mỗi db đó lại có chung 1 điểm là điều có các thông tin thành viên và các thông tin đó điều giống nhau trên tất cả ứng dụng nên mình muốn là chia ra 1 db chỉ để lưu thông tin thành viên (id, username, pass,…)

    2. Với cái db

Giáo trình Quản trị cơ sở dữ liệu nâng cao MS SQL server

  • Tác giả: timtailieu.vn
  • Đánh giá: 5 ⭐ ( 1838 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Giáo trình Quản trị cơ sở dữ liệu nâng cao MS SQL server – II. Các kiểu dữ liệu trong SQL Server Kiểu dữ liệu được dùng để xác định kiểu thông tin (số…

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình