在select子句中使用replace

时间:2014-08-14 18:25:23

标签: sql sql-server-2008

尝试使用REPLACE重命名字符串的开头和结尾。我拥有的字符串是,例如:ABCD - [001]。我想要得到001并计算。

示例:SQLFIDDLE

结果应为:

Description  Total
        001      4
        002      2
        003      3

3 个答案:

答案 0 :(得分:1)

SQL Fiddle

MS SQL Server 2008架构设置

CREATE TABLE Table1 
  (
    Description varchar(20)
  );

INSERT INTO Table1
  (
    Description
  )

VALUES
  ('ABCD - [001]'),('ABCD - [001]'),('XIo9 - [001]'),('001'),
  ('XYZW - [002]'),('002'),('XYZW - [003]'),('XYZW - [003]'),('003');

查询1

SELECT
    RIGHT(REPLACE(REPLACE(RIGHT('0000' + Description,4), '[', ''),']',''),3) Description,
    COUNT (*) AS Total
FROM
    Table1
GROUP BY
    RIGHT(REPLACE(REPLACE(RIGHT('0000' + Description,4), '[', ''),']',''),3)
ORDER BY
    Description ASC

<强> Results

| DESCRIPTION | TOTAL |
|-------------|-------|
|         001 |     4 |
|         002 |     2 |
|         003 |     3 |

答案 1 :(得分:1)

您的描述字段(至少在示例中)都具有相同位置的数字。因此,获取它们的最简单方法是substring()

SELECT (case when Description LIKE '%/[___/]%' ESCAPE '/' then substring(description, 9, 3)
             else Description
        end) as Description,
        COUNT (*) AS Total
FROM Table1
WHERE Description LIKE '%/[___/]%' ESCAPE '/' OR Description LIKE '___'
GROUP BY (case when Description LIKE '%/[___/]%' ESCAPE '/' then substring(description, 9, 3)
               else Description
          end)
ORDER BY Description ASC;

答案 2 :(得分:1)

您需要使用CASE WHEN LEN(Description)=3 THEN Description ELSE SUBSTRING(Description, 9, 3) END来选择说明列。

您的查询应该是

SELECT
    CASE WHEN LEN(Description)=3 THEN Description ELSE SUBSTRING(Description, 9, 3) END as Description,
    COUNT (*) AS Total
FROM
    Table1
WHERE
    Description LIKE '%/[___/]%' ESCAPE '/' OR Description LIKE '___'
GROUP BY
    Description
ORDER BY
    Description ASC