【问题标题】:Substring (...,...,CHARINDEX(....)-0.5) function子字符串 (...,...,CHARINDEX(....)-0.5) 函数
【发布时间】:2016-10-24 12:03:25
【问题描述】:

我在名为Parent_ID 的列中有这个字符串。那里存在的字符串示例:

RBIA-3340-CU-XM-01-D/RBIA-3340-01-4-D-34080-11441A1-2TC-001/B1

我想要的是:

RBIA-3340-CU-XM-01-D/RBIA-3340-01-4-D-34080-11441A1-2TC-001

没有/B1

当我写这段代码时:

SELECT Substring([parent_id], 1,
                 CHARINDEX('/B',parent_id,25)-1)
FROM [c3d_aug].[dbo].[atta_properties]

我收到了这个错误:

"Msg 537, Level 16, State 3, Line 1 传递给的长度参数无效 LEFT 或 SUBSTRING 函数。"

经过测试,我不小心将-1 更改为-0.5,它工作正常。

SELECT Substring([parent_id],1,
                 CHARINDEX('/B',parent_id,25)-0.5)
FROM [c3d_aug].[dbo].[atta_properties]

谁能解释为什么?!请注意,上面给出的主字符串不包含任何空格。

【问题讨论】:

  • 不,在您的示例中,CHARINDEX 返回 60
  • 声明@Parentid varchar(max) = 'RBIA-3340-CU-XM-01-D/RBIA-3340-01-4-D-34080-11441A1-2TC-001/B1' 选择charindex('/B', @parentid) -- 返回 60 选择子字符串(@parentid,1, charindex('/B', @parentid) - 1)

标签: sql-server string tsql substring charindex


【解决方案1】:

我不建议您使用-0.5。它可能会起作用,因为当浮点数转换回整数时,负数会被“截断”为零(如函数所要求的那样)。

我会建议:

SElECT LEFT([parent_id],
            CHARINDEX('/B', parent_id + '/B', 25) - 1
           )
FROM [c3d_aug].[dbo].[atta_properties];

通过在字符串末尾添加模式,您不必担心从CHARINDEX() 返回0

LEFT()SUBSTRING() 更方便。

【讨论】:

  • 很抱歉再次询问,但为什么我们会从 charindex 函数中得到 0 呢?
  • 函数应该给出某个字符的位置?,我刚接触SQL,不好意思问了很多,谢谢你的回复
  • @AutomationENG 。 . .找不到字符串时,函数返回0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
相关资源
最近更新 更多