当前位置:Gxlcms > mssql > SQLServer提取数字、提取英文、提取中文的sql语句

SQLServer提取数字、提取英文、提取中文的sql语句

时间:2021-07-01 10:21:17 帮助过:140人阅读

  1. --SQL 判断字段值是否有中文
  2. create function fun_getCN(@str nvarchar(4000))
  3. returns nvarchar(4000)
  4. as
  5. begin
  6. declare @word nchar(1),@CN nvarchar(4000)
  7. set @CN=''
  8. while len(@str)>0
  9. begin
  10. set @word=left(@str,1)
  11. if unicode(@word) between 19968 and 19968+20901
  12. set @CN=@CN+@word
  13. set @str=right(@str,len(@str)-1)
  14. end
  15. return @CN
  16. end
  17. select dbo.fun_getCN('ASDKG论坛KDL')
  18. --论坛
  19. select dbo.fun_getCN('ASDKG論壇KDL')
  20. --論壇
  21. select dbo.fun_getCN('ASDKDL')
  22. --空
  23. -------------------------------------
  24. --提取数字
  25. IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
  26. DROP FUNCTION DBO.GET_NUMBER2
  27. GO
  28. CREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))
  29. RETURNS VARCHAR(100)
  30. AS
  31. BEGIN
  32. WHILE PATINDEX('%[^0-9]%',@S) > 0
  33. BEGIN
  34. set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
  35. END
  36. RETURN @S
  37. END
  38. GO
  39. --测试
  40. PRINT DBO.GET_NUMBER('呵呵ABC123ABC')
  41. GO
  42. --123
  43. --------------------------------------------------------------------
  44. --提取英文
  45. IF OBJECT_ID('DBO.GET_STR') IS NOT NULL
  46. DROP FUNCTION DBO.GET_STR
  47. GO
  48. CREATE FUNCTION DBO.GET_STR(@S VARCHAR(100))
  49. RETURNS VARCHAR(100)
  50. AS
  51. BEGIN
  52. WHILE PATINDEX('%[^a-z]%',@S) > 0
  53. BEGIN
  54. set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
  55. END
  56. RETURN @S
  57. END
  58. GO
  59. --测试
  60. PRINT DBO.GET_STR('呵呵ABC123ABC')
  61. GO
  62. --------------------------------------------------------------------
  63. --提取中文
  64. IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
  65. DROP FUNCTION DBO.CHINA_STR
  66. GO
  67. CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
  68. RETURNS VARCHAR(100)
  69. AS
  70. BEGIN
  71. WHILE PATINDEX('%[^吖-座]%',@S) > 0
  72. SET @S = STUFF(@S,PATINDEX('%[^吖-座]%',@S),1,N'')
  73. RETURN @S
  74. END
  75. GO
  76. PRINT DBO.CHINA_STR('呵呵ABC123ABC')
  77. GO
  78. --------------------------------------------------------------------
  79. --过滤重复字符
  80. IF OBJECT_ID('DBO.DISTINCT_STR') IS NOT NULL
  81. DROP FUNCTION DBO.DISTINCT_STR
  82. GO
  83. CREATE FUNCTION DBO.DISTINCT_STR(@S NVARCHAR(100),@SPLIT VARCHAR(50))
  84. RETURNS VARCHAR(100)
  85. AS
  86. BEGIN
  87. IF @S IS NULL RETURN(NULL)
  88. DECLARE @NEW VARCHAR(50),@INDEX INT,@TEMP VARCHAR(50)
  89. IF LEFT(@S,1)<>@SPLIT
  90. SET @S = @SPLIT+@S
  91. IF RIGHT(@S,1)<>@SPLIT
  92. SET @S = @S+@SPLIT
  93. WHILE CHARINDEX(@SPLIT,@S)>0 AND LEN(@S)<>1
  94. BEGIN
  95. SET @INDEX = CHARINDEX(@SPLIT,@S)
  96. SET @TEMP = LEFT(@S,CHARINDEX(@SPLIT,@S,@INDEX+LEN(@SPLIT)))
  97. IF @NEW IS NULL
  98. SET @NEW = ISNULL(@NEW,'')+@TEMP
  99. ELSE
  100. SET @NEW = ISNULL(@NEW,'')+REPLACE(@TEMP,@SPLIT,'')+@SPLIT
  101. WHILE CHARINDEX(@TEMP,@S)>0
  102. BEGIN
  103. SET @S=STUFF(@S,CHARINDEX(@TEMP,@S)+LEN(@SPLIT),CHARINDEX(@SPLIT,@S,CHARINDEX(@TEMP,@S)+LEN(@SPLIT))-CHARINDEX(@TEMP,@S),'')
  104. END
  105. END
  106. RETURN RIGHT(LEFT(@NEW,LEN(@NEW)-1),LEN(LEFT(@NEW,LEN(@NEW)-1))-1)
  107. END
  108. GO
  109. PRINT DBO.DISTINCT_STR('A,A,B,C,C,B,C,',',')
  110. --A,B,C
  111. GO
  112. --------------------------------------------------------------------
  113. --过滤重复字符2
  114. IF OBJECT_ID('DBO.DISTINCT_STR2') IS NOT NULL
  115. DROP FUNCTION DBO.DISTINCT_STR2
  116. GO
  117. CREATE FUNCTION DBO.DISTINCT_STR2(@S varchar(8000))
  118. RETURNS VARCHAR(100)
  119. AS
  120. BEGIN
  121. IF @S IS NULL RETURN(NULL)
  122. DECLARE @NEW VARCHAR(50),@INDEX INT,@TEMP VARCHAR(50)
  123. WHILE LEN(@S)>0
  124. BEGIN
  125. SET @NEW=ISNULL(@NEW,'')+LEFT(@S,1)
  126. SET @S=REPLACE(@S,LEFT(@S,1),'')
  127. END
  128. RETURN @NEW
  129. END
  130. GO
  131. SELECT DBO.DISTINCT_STR2('AABCCD')
  132. --ABCD
  133. GO
  134. --------------------------------------------------------------------
  135. IF OBJECT_ID('DBO.SPLIT_STR') IS NOT NULL
  136. DROP FUNCTION DBO.SPLIT_STR
  137. GO
  138. CREATE FUNCTION DBO.SPLIT_STR(
  139. @S varchar(8000), --包含多个数据项的字符串
  140. @INDEX int, --要获取的数据项的位置
  141. @SPLIT varchar(10) --数据分隔符
  142. )
  143. RETURNS VARCHAR(100)
  144. AS
  145. BEGIN
  146. IF @S IS NULL RETURN(NULL)
  147. DECLARE @SPLITLEN int
  148. SELECT @SPLITLEN=LEN(@SPLIT+'A')-2
  149. WHILE @INDEX>1 AND CHARINDEX(@SPLIT,@S+@SPLIT)>0
  150. SELECT @INDEX=@INDEX-1,@S=STUFF(@S,1,CHARINDEX(@SPLIT,@S+@SPLIT)+@SPLITLEN,'')
  151. RETURN(ISNULL(LEFT(@S,CHARINDEX(@SPLIT,@S+@SPLIT)-1),''))
  152. END
  153. GO
  154. PRINT DBO.SPLIT_STR('AA|BB|CC',2,'|')
  155. --
  156. GO

人气教程排行