5

假设我在 SQL 数据库中有一些包含许多数据的表,并且其中一些行几乎相同,例如:

|===========================================|
|           Message                         |
|===========================================|
|              ...                          |
|-------------------------------------------|
|    account is rejected: <aa>              |
|-------------------------------------------|
|    account is rejected: <bb>              |
|-------------------------------------------|
|    mailbox unavailable: 550 550 <1@b.com> |
|-------------------------------------------|
|    mailbox unavailable: 550 550 <2@b.com> |
|-------------------------------------------|
|                 ...                       |

出于我的目的,前 2 行相同,最后 2 行相同,因此查询应返回

  1. 帐户被拒绝:
  2. 邮箱不可用:550 550

我想编写查询来选择行,消除'<'符号之后的字符,然后会做DISTINCT,但我不知道如何做SELECT

你能帮我写这样的查询吗?

4

1 回答 1

5

以下内容从一<开始就删除了所有内容。

GROUP BY比使用更灵活,但DISTINCT在这种情况下完成同样的事情。

CASE声明是为了满足其中没有 a 的消息的可能性<。如果总是有一个<Then 只需使用该ELSE部分。

SELECT
  CASE WHEN CHARINDEX('<', Message) = 0 THEN Message ELSE LEFT(Message, CHARINDEX('<', Message)-1)) END AS Message
FROM
  yourTable
GROUP BY
  CASE WHEN CHARINDEX('<', Message) = 0 THEN Message ELSE LEFT(Message, CHARINDEX('<', Message)-1)) END
于 2012-08-07T16:03:54.930 回答