Structured Query Language —— “結構化查詢語言簡稱SQL,是一種特殊目的的編程語言,是一種資料庫查詢和程式設計語言,用于存取資料以及查詢、更新和管理關系資料庫系統,
結構化查詢語言是高級的非程序化編程語言,允許用戶在高層資料結構上作業,它不要求用戶指定對資料的存放方法,也不需要用戶了解具體的資料存放方式,所以具有完全不同底層結構的不同資料庫系統, 可以使用相同的結構化查詢語言作為資料輸入與管理的介面,結構化查詢語言陳述句可以嵌套,這使它具有極大的靈活性和強大的功能,”SQL雖然其是主要針對關系型資料庫的查詢語言,也可以通過“CREATE FUNCTION”自定義函式邏輯,在文本分析的領域發揮作用,如下是對于文字相似度的自定義函式:
- 考慮字符:
CREATE FUNCTION DBO.FN_Resemble
(@Cloumna NVARCHAR(MAX),
@Cloumnb NVARCHAR(MAX)
)
RETURNS FLOAT
AS
BEGIN
DECLARE @num FLOAT,@len int
SET @Cloumna=ISNULL(@Cloumna,0)
SET @Cloumnb=ISNULL(@Cloumnb,0)
SET @len=1
SET @num=0
WHILE(LEN(@Cloumna)<>0 AND LEN(@CloumnB)<>0)
BEGIN
WHILE(@len<=LEN(@Cloumna))
BEGIN
DECLARE @a NVARCHAR(4)
SET @a=''
SET @a=SUBSTRING(@Cloumna,@len,1)
IF(CHARINDEX(@a,@CloumnB)>0)
BEGIN
SET @num=@num+1
END
SET @len=@len+1
END
SET @num=@num*1.0/LEN(@Cloumna)
BREAK
END
RETURN @num
END
go
- 計算字符順序
CREATE FUNCTION DBO.FN_Resemble_order
(@Cloumna NVARCHAR(MAX),
@Cloumnb NVARCHAR(MAX)
)
RETURNS FLOAT
AS
BEGIN
DECLARE @num FLOAT,@len int
SET @Cloumna=ISNULL(@Cloumna,0)
SET @Cloumnb=ISNULL(@Cloumnb,0)
SET @len=1
SET @num=0
WHILE(LEN(@Cloumna)<>0 AND LEN(@CloumnB)<>0)
BEGIN
DECLARE @a NVARCHAR(4)
DECLARE @b NVARCHAR(4)
IF(LEN(@Cloumna)>=LEN(@CloumnB))
BEGIN
WHILE(@len<=LEN(@CloumnB))
BEGIN
SET @a=''
SET @a=SUBSTRING(@Cloumna,@len,1)
SET @b=''
SET @b=SUBSTRING(@CloumnB,@len,1)
IF(@a=@b)
BEGIN
SET @num=@num+1
END
ELSE
BEGIN
break
END
SET @len=@len+1
END
END
ELSE IF (LEN(@Cloumna)<LEN(@CloumnB))
BEGIN
WHILE(@len<=LEN(@Cloumna))
BEGIN
SET @a=''
SET @a=SUBSTRING(@Cloumna,@len,1)
SET @b=''
SET @b=SUBSTRING(@CloumnB,@len,1)
IF(@a=@b)
BEGIN
SET @num=@num+1
END
ELSE
BEGIN
break
END
SET @len=@len+1
END
END
SET @num=@num*1.0/LEN(@Cloumna)
BREAK
END
RETURN @num
END
go
- 既考慮所包含的字符,也考慮其出現的順序
CREATE FUNCTION DBO.FN_Resemble_onebyone
(@Cloumna NVARCHAR(MAX),
@Cloumnb NVARCHAR(MAX)
)
RETURNS FLOAT
AS
BEGIN
DECLARE @num FLOAT,@len int
SET @Cloumna=ISNULL(@Cloumna,0)
SET @Cloumnb=ISNULL(@Cloumnb,0)
SET @len=1
SET @num=0
WHILE(LEN(@Cloumna)<>0 AND LEN(@CloumnB)<>0)
BEGIN
DECLARE @a NVARCHAR(4)
DECLARE @b NVARCHAR(4)
IF(LEN(@Cloumna)>=LEN(@CloumnB))
BEGIN
WHILE(@len<=LEN(@CloumnB))
BEGIN
SET @a=''
SET @a=SUBSTRING(@Cloumna,@len,1)
SET @b=''
SET @b=SUBSTRING(@CloumnB,@len,1)
IF(@a=@b)
BEGIN
SET @num=@num+1
END
SET @len=@len+1
END
END
ELSE IF (LEN(@Cloumna)<LEN(@CloumnB))
BEGIN
WHILE(@len<=LEN(@Cloumna))
BEGIN
SET @a=''
SET @a=SUBSTRING(@Cloumna,@len,1)
SET @b=''
SET @b=SUBSTRING(@CloumnB,@len,1)
IF(@a=@b)
BEGIN
SET @num=@num+1
END
SET @len=@len+1
END
END
SET @num=@num*1.0/LEN(@Cloumna)
BREAK
END
RETURN @num
END
go
特別地,在關系型資料庫中,運用SQL 自定義函式達到資料處理(資料治理)的目的是ETL的基本功能之一;也可以為資料分析的查詢取數或者關鍵指標的換算打基礎,
同時,在資料科學領域,資料分析大多數情況,R語言或者Python會主要來承擔此類任務,在特殊情況下,這些語言也有包含有相應的函式以幫助分析師做前期的資料清理(類似于SQL的自定義功能),
相比封裝的函式,SQL的這種功能會相對靈活些,更能夠根據具體的業務邏輯撰寫,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/247137.html
標籤:SQL Server
上一篇:redis-哨兵
