Chuyên Gia Marketing Võ Tuấn Hải
  • Đánh giá: ( ★ trên 0 đánh giá)
Chia sẻ :

Trong phần 1 của Các hàm SQL server tự định nghĩa có thể hữu ích cho bạn tôi đã gới thiệu cho bạn một số hàm dùng trong lập trình cơ sở dữ liệu. Trong phần 2 này tôi tiếp tục giới thiệu bạn một số hàm khác mà tôi đã và đang dùng

Giới thiệu website: Chuyên gia Marketing Võ Tuấn Hải

Trong phần 1 Các hàm SQL server Tự định tôi đã giới thiệu các hàm như Hàm convert chuỗi TCVN sang Unicode, Hàm convert chuỗi Unicode sang TCVN, Hàm Split trong SQL, Hàm mã hóa và giải mã ký tự ... bài này tôi tiếp tục giới thiệu bạn các hàm khác, hy vọng chúng sẽ có ích dành cho các bạn

Hàm cắt chuỗi trong SQL

Giả sử tiêu đề bài viết của bạn khá dài và bạn chỉ muốn khi liệt kê lên web các tiêu đề ngắn sao cho đủ với khuôn khổ trang web của bạn, Nhưng nếu bạn lấy độ dài cố định thì có thể sẽ bị cắt ngang từ. Ví dụ chuỗi Chia sẻ là niềm vui Bạn muốn cắt lấy 14 ký tự đầu, nếu bạn dùng LEFT(N'Chia sẻ là niềm vui',14) khi đó chuỗi bạn cần lấy sẽ là Chia sẻ là niề Như vậy chuỗi kết quả của bạn không đủ từ. Với hàm sau tôi sẽ trả về cho bạn chuỗi kết quả luôn đủ từ Chia sẻ là niềm

CREATE FUNCTION [dbo].[CatChuoi]( @ChuoiNguon nvarchar(2000), @len int) RETURNS nvarchar(1000) AS BEGIN DECLARE @n nvarchar(200) IF (len(@ChuoiNguon)<=@len) SET @n=@ChuoiNguon ELSE BEGIN SET @n=substring(@ChuoiNguon,0,@len) WHILE @len BEGIN IF(RIGHT(@n,1)!=' ') BEGIN SET @len=@len+1 --SET @len=@k SET @n=substring(@ChuoiNguon,0,@len) END ELSE SET @len=len(@ChuoiNguon) END END RETURN @n END

Hàm Convert chuỗi NCR Decimal sang Unicode

Dữ liệu NCR Decimal có dạng: C&#7897;ng h&#242;a x&#227; h&#7897;i ch&#7911; ngh&#297;a Vi&#7879;t Nam khi hiển thị trên trình duyệt thì nó vẫn là Cộng hòa xã hội chủ nghĩa Việt Nam nhưng để tối ưu dữ liệu chắc chắn bạn không muốn dữ liệu được lưu dưới dạng mã code html như vậy. Ở hàm này tôi có sử dụng hàm fnSplit, bạn có thể lấy hàm này ở phần 1 của loạt bài viết này (Hàm Split trong SQL)

CREATE FUNCTION [dbo].[fNCRToUnicode] (@strInput NVARCHAR(4000)) RETURNS NVARCHAR(4000) AS BEGIN DECLARE @a nvarchar(10),@b nvarchar(10), @i int DECLARE @TCVN Nvarchar(4000), @strOutput nvarchar(4000) SET @strOutput='' DECLARE @UNICODE Nvarchar(4000) SET @TCVN = '&#225;,&#224;,&#7841;,&#7843;,&#227;,&#226;,&#7845;,&#7847;,&#7853;,&#7849;,&#7851;,&#259;,&#7855;,&#7857;,&#7863;,&#7859;,&#7861;,&#é;,&#232;,&#7865;,&#7867;,&#7869;,&#234;,&#7871;,&#7873;,&#7879;,&#7875;,&#7877;,&#243;,&#242;,&#7885;,&#7887;,&#245;,&#244;,&#7889;,&#7891;,&#7897;,&#7893;,&#7895;,&#417;,&#7899;,&#7901;,&#7907;,&#7903;,&#7905;,&#250;,&#249;,&#7909;,&#7911;,&#361;,&#432;,&#7913;,&#7915;,&#7921;,&#7917;,&#7919;,&#237;,&#236;,&#7883;,&#7881;,&#297;,&#273;,&#253;,&#7923;,&#7925;,&#7927;,&#7929;' SET @TCVN = @TCVN+'&#193;,&#192;,&#7840;,&#7842;,&#195;,&#194;,&#7844;,&#7846;,&#7852;,&#7848;,&#7850;,&#258;,&#7854;,&#7856;,&#7862;,&#7858;,&#7860;,&#200;,&#7864;,&#7866;,&#7868;,&#7870;,&#7872;,&#7878;,&#7874;,&#7876;,&#211;,&#210;,&#7884;,&#7886;,&#213;,&#212;,&#7888;,&#7890;,&#7896;,&#7892;,&#7894;,&#416;,&#7898;,&#7900;,&#7906;,&#7902;,&#7904;,&#218;,&#217;,&#7908;,&#7910;,&#360;,&#431;,&#7912;,&#7914;,&#7920;,&#7916;,&#7918;,&#272;,&#221;,&#7922;,&#7924;,&#7926;,&#7928;' SET @UNICODE = N'á,à,ạ,ả,ã,â,ấ,ầ,ậ,ẩ,ẫ,ă,ắ,ằ,ặ,ẳ,ẵ,é,è,ẹ,ẻ,ẽ,ê,ế,ề,ệ,ể,ễ,ó,ò,ọ,ỏ,õ,ô,ố,ồ,ộ,ổ,ỗ,ơ,ớ,ờ,ợ,ở,ỡ,ú,ù,ụ,ủ,ũ,ư,ứ,ừ,ự,ử,ữ,í,ì,ị,ỉ,ĩ,đ,ý,ỳ,ỵ,ỷ,ỹ' SET @UNICODE = @UNICODE+N'Á,À,Ạ,Ả,Ã,Â,Ấ,Ầ,Ậ,Ẩ,Ẫ,Ă,Ắ,Ằ,Ặ,Ẳ,Ẵ,È,Ẹ,Ẻ,Ẽ,Ế,Ề,Ệ,Ể,Ễ,Ó,Ò,Ọ,Ỏ,Õ,Ô,Ố,Ồ,Ộ,Ổ,Ỗ,Ơ,Ớ,Ờ,Ợ,Ở,Ỡ,Ú,Ù,Ụ,Ủ,Ũ,Ư,Ứ,Ừ,Ự,Ử,Ữ,Đ,Ý,Ỳ,Ỵ,Ỷ,Ỹ' DECLARE @CurrentRow int DECLARE @MaxRow int SELECT @MaxRow = isnull(Max([id]),0) FROM dbo.fnSplit(@UNICODE,',') SET @CurrentRow = 1 WHILE @CurrentRow <=@MaxRow BEGIN SELECT @a=tt.part FROM dbo.fnSplit(@TCVN,',') tt WHERE tt.id=@CurrentRow SELECT @b=tt.part FROM dbo.fnSplit(@UNICODE,',') tt WHERE tt.id=@CurrentRow SET @strOutput=replace(@strInput,@a,@b) SET @strInput=@strOutput SET @CurrentRow = @CurrentRow + 1 END RETURN @strOutput END

Hàm chuyển chuỗi có dấu thành không dấu

Hiện nay các website thường thay thế URL thành dạng không dấu (ví dụ: loc-dau-tieng-viet-trong-csharp-javascript-va-sql-server.htm) nhưng tiêu đề của bạn lại là tiếng việt có dấu vậy nên việc lọc dấu tiếng việt là cần thiết, Bạn tham khảo hàm sau đây (Các hàm tương tự đối cới Csharp hoặc javascript bạn có thể tham khảo bài viết này: Lọc dấu tiếng Việt)

CREATE FUNCTION [dbo].[fNoSign] ( @strInput NVARCHAR(4000) ) RETURNS NVARCHAR(4000) AS Begin Set @strInput=rtrim(ltrim(lower(@strInput))) IF @strInput IS NULL RETURN @strInput

Đọc thêm bài viết: Một số thủ thuật lập trình ASP.net

IF @strInput = '' RETURN @strInput Declare @text nvarchar(50), @i int Set @text='-''`~!@#$%^&*()<:|}{,./\"''='';–+' Select @i= PATINDEX('%['+@text+']%',@strInput ) while @i > 0 begin set @strInput = replace(@strInput, substring(@strInput, @i, 1), '') set @i = patindex('%['+@text+']%', @strInput) End Set @strInput =replace(@strInput,' ',' ')

DECLARE @RT NVARCHAR(4000) DECLARE @SIGN_CHARS NCHAR(136) DECLARE @UNSIGN_CHARS NCHAR (136) SET @SIGN_CHARS = N'ăâđêôơưàảãạáằẳẵặắầẩẫậấèẻẽẹéềểễệế ìỉĩịíòỏõọóồổỗộốờởỡợớùủũụúừửữựứỳỷỹỵý' +NCHAR(272)+ NCHAR(208) SET @UNSIGN_CHARS = N'aadeoouaaaaaaaaaaaaaaaeeeeeeeeee iiiiiooooooooooooooouuuuuuuuuuyyyyy' DECLARE @COUNTER int DECLARE @COUNTER1 int SET @COUNTER = 1 WHILE (@COUNTER <=LEN(@strInput)) BEGIN SET @COUNTER1 = 1 WHILE (@COUNTER1 <=LEN(@SIGN_CHARS)+1) BEGIN IF UNICODE(SUBSTRING(@SIGN_CHARS, @COUNTER1,1)) = UNICODE(SUBSTRING(@strInput,@COUNTER ,1) ) BEGIN IF @COUNTER=1 SET @strInput = SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1) + SUBSTRING(@strInput, @COUNTER+1,LEN(@strInput)-1) ELSE SET @strInput = SUBSTRING(@strInput, 1, @COUNTER-1) +SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1) + SUBSTRING(@strInput, @COUNTER+1,LEN(@strInput)- @COUNTER) BREAK END SET @COUNTER1 = @COUNTER1 +1 END SET @COUNTER = @COUNTER +1 End SET @strInput = replace(@strInput,' ','-') SET @strInput=replace(@strInput,'?','') RETURN lower(@strInput) End

Hàm SQL chuyển số hệ thập phân sang Nhị phân

CREATE FUNCTION [dbo].[udf_bin_me] (@decNumber int) RETURNS varchar(200) as BEGIN DECLARE @BinNumber VARCHAR(200) SET @BinNumber = '' WHILE @decNumber <> 0 BEGIN SET @BinNumber = SUBSTRING('0123456789', (@decNumber % 2) + 1, 1) + @BinNumber SET @decNumber = @decNumber / 2 END RETURN @BinNumber END

Hàm SQL Loại bỏ tất cả thẻ html của chuỗi

Giả sử bạn có chuỗi và muốn loại bỏ toàn bộ thẻ html của nó, chỉ lấy nguyên phần text, bạn tham khảo hàm sau:

CREATE FUNCTION [dbo].[udf_StripHTML] (@HTMLText NVARCHAR(MAX)) RETURNS NVARCHAR(MAX) AS BEGIN DECLARE @Start INT DECLARE @End INT DECLARE @Length INT SET @Start = CHARINDEX('<',@HTMLText) SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText)) SET @Length = (@End - @Start) + 1 WHILE @Start > 0 AND @End > 0 AND @Length > 0 BEGIN SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'') SET @Start = CHARINDEX('<',@HTMLText) SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText)) SET @Length = (@End - @Start) + 1 END RETURN LTRIM(RTRIM(@HTMLText)) END

Ví dụ:

SELECT dbo.udf_StripHTML (N'Chia sẻ là niềm vui') Khi đó kết quả sẻ là Chia sẻ là niềm vui Với hàm này trong C# bạn có thể tham khảo trong các thủ thuật lập trình ASP.net

Để tránh bạn phải đọc bài viết quá dài tôi sẽ dừng lại ở đây, trong bài sau tôi sẽ gửi đến các bạn các hàm khác. Chúc các bạn thành công

HMCLIP ADMIN

Chia sẻ :
T.04 26
T.01 27
T.01 06
0987 087 034 (MR.Hải)Gọi