【问题标题】:SUBSTRING WITH CHARINDEX使用 CHARINDEX 子串
【发布时间】:2018-09-05 14:14:45
【问题描述】:

我有一列包含由“/”分隔的两个连接数据,我只想获取“/”之前等于另一个表的列的内容,因此我尝试将 SUBSTRING 与 CHARINDEX 一起使用,但是我认为我做错了什么,请按照代码进行操作。

翻译:Olá, possuo uma coluna que contem dois dados concatenados separados por um '/', quero pegar apenas o que está antes da '/' que seja igual a uma coluna de uma outra tabela, para isso estoutentando utilizar o SUBSTRING com CHARINDEX, mas creio que estou fazendo algo de errado, segue o código.

SELECT TOP 1 * FROM arquivo A, tabela_geral B (NOLOCK), campo_concatenado C (NOLOCK)
WHERE A.primeira_parte = SUBSTRING(C.concatenado, 1, CHARINDEX('/', C.concatenado) -1)
AND B.status = 0
AND B.campo = '13'
AND B.numero NOT IN (6, 78, 79, 80, 81, 82, 83, 91)

【问题讨论】:

标签: sql sql-server tsql substring charindex


【解决方案1】:

你应该处理没有'/'的行

如果你考虑像'/'之前的值

SELECT TOP 1 * FROM arquivo A, tabela_geral B (NOLOCK), campo_concatenado C (NOLOCK)
WHERE A.primeira_parte = COALESCE(SUBSTRING(C.concatenado, 1, NULLIF(CHARINDEX('/', C.concatenado), 0) -1), C.concatenado)
AND B.status = 0
AND B.campo = '13'
AND B.numero NOT IN (6, 78, 79, 80, 81, 82, 83, 91)

如果你考虑像'/'之后的值

SELECT TOP 1 * FROM arquivo A, tabela_geral B (NOLOCK), campo_concatenado C (NOLOCK)
WHERE A.primeira_parte = SUBSTRING(C.concatenado, 1, NULLIF(CHARINDEX('/', C.concatenado), 0) -1)
AND B.status = 0
AND B.campo = '13'
AND B.numero NOT IN (6, 78, 79, 80, 81, 82, 83, 91)

我强烈建议你关注 Sean Lange cmets

【讨论】:

  • 嘿,谢谢,我做了一些调整,效果很好。
【解决方案2】:

你试过了吗?

 SELECT TOP 1 * FROM arquivo A, tabela_geral B (NOLOCK), campo_concatenado C (NOLOCK)
  WHERE A.primeira_parte = "%/"
  AND B.status = 0
  AND B.campo = '13'
  AND B.numero NOT IN (6, 78, 79, 80, 81, 82, 83, 91)

【讨论】:

  • 如果 OP 代码有效,这不会产生相同的结果。同样使用不带LIKE 子句的% 意味着您正在寻找%/ 的字面值。我怀疑这不会返回任何行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多