0

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

这有效..第二个长度

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) 或换行符分隔。

4

1 回答 1

1

如果您正在测试的文本确实有 2 个,并且中间有一些文本,则它工作正常。CHAR(10)如果至少缺少一个 - 您将收到该错误。

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

于 2013-09-20T01:12:17.560 回答