Sql server 我的SQL语句(差分函数)有什么问题

Sql server 我的SQL语句(差分函数)有什么问题,sql-server,Sql Server,有人能解释一下为什么这里会有不同的差值: select RIGHT('name examplename', CHARINDEX(' ', REVERSE('name examplename'))) 此语句为我提供了值examplename select DIFFERENCE('examplename', 'examplename') 这里的区别应该是4 select DIFFERENCE('examplename', RIGHT('name examplename', CHARINDEX(

有人能解释一下为什么这里会有不同的差值:

select RIGHT('name examplename', CHARINDEX(' ', REVERSE('name examplename'))) 
此语句为我提供了值examplename

select DIFFERENCE('examplename', 'examplename')
这里的区别应该是4

select DIFFERENCE('examplename', RIGHT('name examplename', CHARINDEX(' ', REVERSE('name examplename'))))
但是这个语句给了我差值0,为什么?

右边的'name examplename',CHARINDEX',反面的'name examplename'给了你 examplename不是examplename。这些的SOUNDEX值完全不同

要避免您需要的问题,请执行以下操作:

select DIFFERENCE('examplename', CASE WHEN CHARINDEX(' ', @your_string) = 0 THEN @your_string ELSE RIGHT(@your_string, CHARINDEX(' ', REVERSE(@your_string)) - 1) END) 
右边是“name examplename”,右边是“CHARINDEX”,反面是“name examplename” examplename不是examplename。这些的SOUNDEX值完全不同

要避免您需要的问题,请执行以下操作:

select DIFFERENCE('examplename', CASE WHEN CHARINDEX(' ', @your_string) = 0 THEN @your_string ELSE RIGHT(@your_string, CHARINDEX(' ', REVERSE(@your_string)) - 1) END) 

其中一个上有一个前导空格

如果查看返回的SOUNDEX值

select SOUNDEX('examplename'), 
       SOUNDEX(' examplename')
他们完全不同。带前导空格的返回全零


我从来没有发现SOUNDEX或DIFFERENCE对任何个人都有用。

其中一个上面有一个前导空格

如果查看返回的SOUNDEX值

select SOUNDEX('examplename'), 
       SOUNDEX(' examplename')
他们完全不同。带前导空格的返回全零


我从未发现SOUNDEX或DIFFERENCE对任何个人有用。

您还必须从字符串中删除空格字符。 从第一个查询开始,它给出带有空格的结果

使用下面的查询,它们会给出相同的结果

select RIGHT('name examplename', CHARINDEX(' ', REVERSE('name examplename')) - 1) 

select DIFFERENCE('examplename', 'examplename')

select DIFFERENCE('examplename', RIGHT('name examplename', CHARINDEX(' ', REVERSE('name examplename')) - 1) )

还必须从字符串中删除空格字符。 从第一个查询开始,它给出带有空格的结果

使用下面的查询,它们会给出相同的结果

select RIGHT('name examplename', CHARINDEX(' ', REVERSE('name examplename')) - 1) 

select DIFFERENCE('examplename', 'examplename')

select DIFFERENCE('examplename', RIGHT('name examplename', CHARINDEX(' ', REVERSE('name examplename')) - 1) )

请使用此查询解决您的问题

select REPLACE (RIGHT('name examplename', CHARINDEX(' ', REVERSE('name examplename'))), ' ','') 

select DIFFERENCE('examplename', 'examplename')


select DIFFERENCE('examplename', REPLACE (RIGHT('name examplename', CHARINDEX(' ', REVERSE('name examplename'))), ' ',''))

请使用此查询解决您的问题

select REPLACE (RIGHT('name examplename', CHARINDEX(' ', REVERSE('name examplename'))), ' ','') 

select DIFFERENCE('examplename', 'examplename')


select DIFFERENCE('examplename', REPLACE (RIGHT('name examplename', CHARINDEX(' ', REVERSE('name examplename'))), ' ',''))

选择差异'examplename','examplename'选择差异'examplename','examplename'谢谢大家!关于这一差异陈述的另一个问题。如果有一些字符串值没有空格,那么我得到的错误无效长度参数传递给了正确的函数,如何摆脱它?例如,如果只有examplename或name而没有examplename。我想我需要这样的东西:如果charindex值不是null/0,那么-1?已经修改了我的答案@Ziilthanks,现在它更清晰了,差分声明也可以工作了,因为它应该感谢大家!关于这一差异陈述的另一个问题。如果有一些字符串值没有空格,那么我得到的错误无效长度参数传递给了正确的函数,如何摆脱它?例如,如果只有examplename或name而没有examplename。我想我需要这样的东西:如果charindex值不是null/0,那么-1?已经修改了我的答案@Ziilthanks,现在它更清晰了,差分语句可以正常工作。这对于删除空格字符很好。但当我尝试执行smt时,会收到错误消息。类似于:选择差异'examplename',右键'name examplename',CHARINDEX',反转'examplename'-1我有一些没有空格的字符串值,那么-1不是Nessers从您自己的查询中替换空字符串。请参阅答案中提供的查询。这可以很好地删除空格字符。但当我尝试执行smt时,会收到错误消息。类似于:选择差异'examplename',右键'name examplename',CHARINDEX',反转'examplename'-1我有一些没有空格的字符串值,那么-1不是Nessers从您自己的查询中替换空字符串。请参阅答案中提供的查询。