我的SQL语句有什么问题(DIFFERENCE函数)

时间:2016-05-04 11:24:43

标签: sql-server

有人可以解释一下为什么我在这里得到不同的DIFFERENCE值:

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,为什么?

4 个答案:

答案 0 :(得分:2)

你有一个领先的空间。

如果查看返回的SOUNDEX

select SOUNDEX('examplename'), 
       SOUNDEX(' examplename')

他们完全不同。具有前导空格的那个返回全零。

enter image description here

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

答案 1 :(得分:1)

RIGHT('name examplename', CHARINDEX(' ', REVERSE('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) 

答案 2 :(得分: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'))), ' ',''))

答案 3 :(得分:0)

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

使用以下查询,他们会给出相同的结果。

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

select DIFFERENCE('examplename', 'examplename')

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