【问题标题】:TSQL - Locating first occurrence of value in a stringTSQL - 定位字符串中第一次出现的值
【发布时间】:2010-10-22 16:45:47
【问题描述】:

我需要为名为 AddrZip 的列运行一个简单的选择语句,以显示列中第一个空格之后包含“1/2”的所有记录。在 Access 2007 中为:
**Left([Names],InStr(1,[Names]," ")-1),但在 SQL 2005 中无法找到如何执行此操作。我们将不胜感激。

【问题讨论】:

  • 用 charindex(x, y, z) 替换 InStr(x, y, z) 就完成了。
  • 苏,你明白了吗?

标签: sql-server-2005 tsql string-math


【解决方案1】:

首先,查找带有' ' 的记录:

CHARINDEX(' ', [AddrZip]) > 0

然后查找在' ' 之后出现'1/2' 的记录

CHARINDEX('1/2', [AddrZip], CHARINDEX(' ', [AddrZip])) > 0

SELECT  *
FROM    ( SELECT    *
          FROM      [Addresses]
          WHERE     CHARINDEX(' ', [AddrZip]) > 0
        ) x
WHERE   CHARINDEX('1/2', [x].[AddrZip], CHARINDEX(' ', [AddrZip])) > 0

这个“简化”版本可能工作:

SELECT  *
FROM    [Addresses]
WHERE   CHARINDEX(' ', [AddrZip]) > 0
        AND CHARINDEX('1/2', [x].[AddrZip], CHARINDEX(' ', [AddrZip])) > 0

如果您想查找'1/2' 的出现紧接在前面有' ',其中' ' 是字符串中的第一个空格,请使用以下代码:

SELECT  *
FROM    [Addresses]
WHERE   CHARINDEX(' ', [AddrZip]) > 0
        AND CHARINDEX(' ', [AddrZip]) = CHARINDEX(' 1/2', [x].[AddrZip])

尽可能避免使用LIKE 运算符。众所周知,它们的速度很慢。

【讨论】:

  • 只是一个想法。这甚至匹配字符串 'sss 11/2' 这不是 OP 想要的
  • @Sachin,为什么不呢?我在它前面看到一个'1/2'和一个''?那不是OP的规格吗? OP 没有说“1/2”需要立即跟随“”。
  • 是的,你说得对。没有立即提到空格后面的 1/2。我假设 1/2 跟随空间的东西。让我们看看 OP 真正想要什么。 ;)
【解决方案2】:

试试这个 -

select * from table where addrZip like '%\ 1/2%' escape '\'

【讨论】:

    猜你喜欢
    • 2013-10-04
    • 2012-03-17
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    相关资源
    最近更新 更多