经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
相似度判定 - SQL - 关系型数据库
来源:cnblogs  作者:划水De雁晓明  时间:2021/1/11 9:30:25  对本文有异议

 

Structured Query Language  —— “结构化查询语言简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
 

SQL虽然其是主要针对关系型数据库的查询语言,也可以通过“CREATE FUNCTION”自定义函数逻辑,在文本分析的领域发挥作用,如下是对于文字相似度的自定义函数:

 

  • 考虑字符:

 

  1. CREATE FUNCTION DBO.FN_Resemble
  2. (@Cloumna NVARCHAR(MAX),
  3. @Cloumnb NVARCHAR(MAX)
  4. )
  5. RETURNS FLOAT
  6. AS
  7. BEGIN
  8. DECLARE @num FLOAT,@len int
  9. SET @Cloumna=ISNULL(@Cloumna,0)
  10. SET @Cloumnb=ISNULL(@Cloumnb,0)
  11. SET @len=1
  12. SET @num=0
  13. WHILE(LEN(@Cloumna)<>0 AND LEN(@CloumnB)<>0)
  14. BEGIN
  15. WHILE(@len<=LEN(@Cloumna))
  16. BEGIN
  17. DECLARE @a NVARCHAR(4)
  18. SET @a=''
  19. SET @a=SUBSTRING(@Cloumna,@len,1)
  20. IF(CHARINDEX(@a,@CloumnB)>0)
  21. BEGIN
  22. SET @num=@num+1
  23. END
  24. SET @len=@len+1 
  25. END
  26. SET @num=@num*1.0/LEN(@Cloumna)
  27. BREAK
  28. END
  29. RETURN @num
  30. END
  31. go

 

  • 计算字符顺序
  1. CREATE FUNCTION DBO.FN_Resemble_order
  2. (@Cloumna NVARCHAR(MAX),
  3. @Cloumnb NVARCHAR(MAX)
  4. )
  5. RETURNS FLOAT
  6. AS
  7. BEGIN
  8. DECLARE @num FLOAT,@len int
  9. SET @Cloumna=ISNULL(@Cloumna,0)
  10. SET @Cloumnb=ISNULL(@Cloumnb,0)
  11. SET @len=1
  12. SET @num=0
  13. WHILE(LEN(@Cloumna)<>0 AND LEN(@CloumnB)<>0)
  14. BEGIN
  15. DECLARE @a NVARCHAR(4)
  16. DECLARE @b NVARCHAR(4)
  17. IF(LEN(@Cloumna)>=LEN(@CloumnB))
  18. BEGIN
  19. WHILE(@len<=LEN(@CloumnB))
  20. BEGIN
  21. SET @a=''
  22. SET @a=SUBSTRING(@Cloumna,@len,1)
  23. SET @b=''
  24. SET @b=SUBSTRING(@CloumnB,@len,1)
  25. IF(@a=@b)
  26. BEGIN
  27. SET @num=@num+1
  28. END
  29. ELSE
  30. BEGIN
  31. break
  32. END
  33. SET @len=@len+1 
  34. END
  35. END
  36. ELSE IF (LEN(@Cloumna)<LEN(@CloumnB))
  37. BEGIN
  38. WHILE(@len<=LEN(@Cloumna))
  39. BEGIN
  40. SET @a=''
  41. SET @a=SUBSTRING(@Cloumna,@len,1)
  42. SET @b=''
  43. SET @b=SUBSTRING(@CloumnB,@len,1)
  44. IF(@a=@b)
  45. BEGIN
  46. SET @num=@num+1
  47. END
  48. ELSE
  49. BEGIN
  50. break
  51. END
  52. SET @len=@len+1 
  53. END
  54. END
  55. SET @num=@num*1.0/LEN(@Cloumna)
  56. BREAK
  57. END
  58. RETURN @num
  59. END
  60. go

  

  • 既考虑所包含的字符,也考虑其出现的顺序
  1. CREATE FUNCTION DBO.FN_Resemble_onebyone
  2. (@Cloumna NVARCHAR(MAX),
  3. @Cloumnb NVARCHAR(MAX)
  4. )
  5. RETURNS FLOAT
  6. AS
  7. BEGIN
  8. DECLARE @num FLOAT,@len int
  9. SET @Cloumna=ISNULL(@Cloumna,0)
  10. SET @Cloumnb=ISNULL(@Cloumnb,0)
  11. SET @len=1
  12. SET @num=0
  13. WHILE(LEN(@Cloumna)<>0 AND LEN(@CloumnB)<>0)
  14. BEGIN
  15. DECLARE @a NVARCHAR(4)
  16. DECLARE @b NVARCHAR(4)
  17. IF(LEN(@Cloumna)>=LEN(@CloumnB))
  18. BEGIN
  19. WHILE(@len<=LEN(@CloumnB))
  20. BEGIN
  21. SET @a=''
  22. SET @a=SUBSTRING(@Cloumna,@len,1)
  23. SET @b=''
  24. SET @b=SUBSTRING(@CloumnB,@len,1)
  25. IF(@a=@b)
  26. BEGIN
  27. SET @num=@num+1
  28. END
  29. SET @len=@len+1 
  30. END
  31. END
  32. ELSE IF (LEN(@Cloumna)<LEN(@CloumnB))
  33. BEGIN
  34. WHILE(@len<=LEN(@Cloumna))
  35. BEGIN
  36. SET @a=''
  37. SET @a=SUBSTRING(@Cloumna,@len,1)
  38. SET @b=''
  39. SET @b=SUBSTRING(@CloumnB,@len,1)
  40. IF(@a=@b)
  41. BEGIN
  42. SET @num=@num+1
  43. END
  44. SET @len=@len+1 
  45. END
  46. END
  47. SET @num=@num*1.0/LEN(@Cloumna)
  48. BREAK
  49. END
  50. RETURN @num
  51. END
  52. go

  

特别地,在关系型数据库中,运用SQL 自定义函数达到数据处理(数据治理)的目的是ETL的基本功能之一;也可以为数据分析的查询取数或者关键指标的换算打基础。

同时,在数据科学领域,数据分析大多数情况,R语言或者Python会主要来承担此类任务,在特殊情况下,这些语言也有包含有相应的函数以帮助分析师做前期的数据清理(类似于SQL的自定义功能)。

相比封装的函数,SQL的这种功能会相对灵活些,更能够根据具体的业务逻辑编写。

 

原文链接:http://www.cnblogs.com/yxmings/p/14258482.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号