减去两个CHARINDEX值

时间:2013-09-19 22:57:59

标签: sql-server sql-server-2008 charindex

更新 - 让我们看看第二个字段,我得到的结果很好......我仍然得到第一个的错误..我需要弄清楚第一个..我认为我需要的是删除第一个..

这有效..第二长度

SELECT  SUBSTRING(AFIELD,
CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1),
CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1)+1) - CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1)) as [second_length]
FROM SOMETABLE with (nolock)

第三长度也有效..

SELECT SUBSTRING(AFIELD,
CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1),
CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1)+1)-CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1)) as [THIRD_length]
FROM SOMETABLE with (nolock)

这仍然不起作用..嗯..

SELECT SUBSTRING(AFIELD,
CHARINDEX(CHAR(10), AFIELD),
CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1)-CHARINDEX(CHAR(10), AFIELD)) as [FIRST_length]
FROM SOMETABLE with (nolock)

旧信息.. 这很好..

SELECT CHARINDEX(CHAR(10), AFIELD)[first]
,CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1)[second]
FROM SOMETABLE

但是当我试图减去这两个时,结果是空的..

我已按照此处发布的信息和 - http://phelabaum.com/archive/tag/charindex/

SELECT  SUBSTRING(AFIELD,
CHARINDEX(CHAR(10),AFIELD)+1,
CHARINDEX(CHAR(10),AFIELD,CHARINDEX(CHAR(10),AFIELD)+1) - CHARINDEX(CHAR(10),AFIELD)) as [first_length]
FROM SOMETABLE

当我运行时,我得到:消息:

  

消息537,级别16,状态3,行1传递给的长度参数无效   LEFT或SUBSTRING功能。

该字段为CHAR(10)或换行符分隔。

1 个答案:

答案 0 :(得分:1)

works fine如果您正在测试的文字中确实有2 CHAR(10),其间有一些文字。如果至少丢失一个 - 你会得到那个错误。

请注意,如果找不到char,CHARINDEX本身不会返回任何错误 - 它将简单地返回0,这就是您的第一个查询运行的原因。