Các hàm T-SQL mới trong SQL Server 2017

SQL Server 2017 bổ sung rất nhiều các hàm t-sql mới, chúng rất đơn giản và dễ sử dụng. Trong phạm vi bài viết này tôi sẽ giới thiệu cho các bạn một số hàm hay được dùng để xử lý chuỗi trong sql server

1.String_AGG

Trong một vài tình huống đặc biệt, các bạn sẽ muốn nhóm các cột khác nhau thành một chuỗi cách nhau bởi dấu phẩy. Ví dụ như một người có nhiều chức vụ thì khi select chức vụ bạn sẽ gộp nhiều dòng thành 1 chuỗi duy nhất để dễ theo dõi.

xét tiếp ví dụ sau

Bây giờ nếu muốn lấy các dòng của bảng MarketingChanel sau đó gộp thành một chuỗi, chúng ta sẽ sử dụng một trick với XML

Câu lệnh trên hoàn toàn giải quyết được vấn đề, tuy nhiên câu lệnh nhìn không được thân thiện và có phần khó hiểu. Thật may mắn là trong bản SQL Server 2017 chúng ta có cách đơn giản hơn nhiều, chỉ cần dùng dùng string_agg như sau

2 câu lệnh trên cho cùng một kết quả

Trong database mẫu AdventureWorks, chúng ta có một ví dụ khá thú vị đó là bảng Person và EmailAddress có liên kết với nhau theo quan hệ 1-n. Để lấy danh sách các Person và Email chúng ta viết câu lệnh sau

Kết quả chạy sẽ bị lỗi

Lỗi khi chạy hàm string_agg trong sql server 2017

Lỗi khi chạy hàm string_agg trong sql server 2017

Nguyên nhân là vì giới hạn dung lượng (size limit) của hàm string_agg phụ thuộc vào kiểu dữ liệu của cột được truyền vào (ở đây là emailAddress). Thông thường nếu cột dữ liệu của chúng là nvarchar thì sẽ không có vấn đề gì ở đây cả, nhưng trong database AdventureWork thì emailAddress được set datatype là 8000 byte nên lỗi là điều hiển nhiên. Để khắc phục vấn đề này chúng ta cần ép kiểu là xong

2.Trim

Một hàm tưởng chừng như quá đơn giản và cần thiết nhưng mãi tới tận phiên bản sql server 2017 chúng ta mới được sử dụng nó

3.Concat_WS

Hàm concat_ws tương tự với hàm contact đã có sẵn trong phiên bản sql server 2012 trở đi.

Một ví dụ về hàm concat trong sql server 2012

Kết quả là chuỗi “Chào Mừng Các Bạn”, các kí tự null được bỏ qua

Sự khác biệt giữa contact_ws và concat chính là hậu tố ws (With Separator). Hiểu ra có nghĩa là chúng ta có thể gộp các chuỗi lại và thêm được dấu ngăn cách

Kết quả

Bây giờ chúng ta có thể vận dụng hàm concat_ws và string_agg để export dữ liệu ra csv

Kết quả

Bây giờ chỉ cần copy ra file text, save lại dưới dạng csv là được . Hoặc có thể chọn export ra file

xuất csv trong sql server 2017

export ra file csv trong sql server 2017

4.Translate

Hiểu một cách đơn giản thì hàm translate là một sự nâng cấp mạnh mẽ của hàm replace. Cùng xem ví dụ sau

kết quả của câu lệnh trên là

Và nếu chúng ta sử dụng hàm replace thì câu lệnh trông có phần kinh dị như sau