理解SQL语言

时间:2017-08-30 15:56:49

标签: mysql sql

有人可以帮助我更好地理解这个查询吗?我想从我的字符串中删除所有特殊字符,但我不明白如何将它应用于我自己的查询。我在Stackoverflow上发现了这个查询,它似乎适用于某些人。我假设@str是我的字符串名称,但我不知道@expres代表什么。我需要一个select / from语句吗?

DECLARE @str VARCHAR(400)
    DECLARE @expres  VARCHAR(50) = '%[~,@,#,$,%,&,*,(,),.,!]%'
      SET @str = '(remove) ~special~ *characters. from string in sql!'
      WHILE PATINDEX( @expres, @str ) > 0
          SET @str = Replace(REPLACE( @str, SUBSTRING( @str, PATINDEX( @expres, @str ), 1 ),''),'-',' ')

3 个答案:

答案 0 :(得分:1)

从上面的代码中,您需要先了解一些事项

    @中的
  • sql是变量声明的一种形式,这意味着您为该名称指定了值
  • 在这种情况下,
  • @express是您要从字符串中删除的字符列表。因此,[]内的任何内容都将在代码的下一部分中进行搜索
  • PATINDEX是一项功能,可以搜索您的@string,看看是否与@express中的内容匹配。如果有,它将返回比赛开始的索引。
  • 将此条件置于WHILE内意味着它将循环遍历@string,直到没有匹配为止,这意味着所有匹配项都已删除
  • 最后SET行是删除发生的地方。这是使用REPLACE完成的。
  • REPLACE有3个参数;您正在搜索的字符串,在本例中为@string,您要替换的模式,在本例中为@expres,最后您将替换它,在本例中为' ''-'
  • SUBSTRING内的REPLACE正试图找到它想要替换的第一件事。要做到这一点,它需要找到模式开始的位置,因此它使用PATINDEX来查找其索引的位置

我希望这很清楚。您可以在此处找到SUBSTRING PATINDEXREPLACE

的文档

答案 1 :(得分:1)

如果分析SQL,您将看到从@str变量中剥离字符。因此,您需要将其设置为您希望从中删除字符的值。

use SBLReporting 
DECLARE @str VARCHAR(400) 
SELECT @str = name from bbnet.customerrelationship --here you set the @str variable to your desired value
DECLARE @expres VARCHAR(50) = '%[~,@,#,$,%,&,*,(,),.,!]%'
WHILE PATINDEX( @expres, @str ) > 0 SET @str = Replace(REPLACE( @str, SUBSTRING( @str, PATINDEX( @ expres, @ str ), 1 ),''),'-',' ')
SELECT @str -- this will be your stripped value

答案 2 :(得分:0)

您需要输入要删除其特殊字符的字符串@str。

代码段DECLARE @str VARCHAR(400)只是说@str是varchar类型的变量,最多可包含400个字符。

让我们假设你的字符串是"特殊字符就像$#@%"你的代码是:

DECLARE @str VARCHAR(400)
    DECLARE @expres  VARCHAR(50) = '%[~,@,#,$,%,&,*,(,),.,!]%'
      SET @str = 'Special Characters Are Things Like $#@%'
      WHILE PATINDEX( @expres, @str ) > 0
      SET @str = Replace(REPLACE( @str, SUBSTRING( @str, PATINDEX( @expres, @str ), 1 ),''),'-',' ')

最后执行SELECT @str,您应该看到"特殊字符就像"作为你的输出。