删除where语句

时间:2016-05-25 11:38:40

标签: sql-server tsql sql-server-2012

我创建了以下查询以删除项目编号点后面的最后一位数字:1234。 0001

     SELECT
     CASE WHEN CHARINDEX('.', project) > 0 THEN
        LEFT(project, CHARINDEX('.', project)-1) ELSE
        project END
    FROM projects_table
WHERE Project between 1000 AND 2000

因为我需要原始项目编号作为结果,所以案例不应包含在select部分中,而应包含在查询的where部分中。

    SELECT
        Project
    FROM projects_table
    WHERE project = CASE 
              WHEN CHARINDEX('.', project) > 0 AND Project BETWEEN 1000 AND 2000
                  THEN 1
              ELSE 0
          END

更新 项目列是nvarchar(20)列,它给出以下错误:

  

将nvarchar值'271636.001'转换为时转换失败   数据类型int。

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

CASE子句中的WHERE语句不正确。评估永远不会TRUE,因为1很可能永远不会等于LEFT(project, CHARINDEX('.', project)-1)的结果。

您应该使用:

WHERE 1 = CASE 
              WHEN CHARINDEX('.', project) > 0 AND CAST(Project AS NUMERIC(18,5)) BETWEEN 1000 AND 2000
                  THEN 1
              ELSE 0
          END

此条件的简化版本(您可以替换它)是:

WHERE CHARINDEX('.', project) > 0
    AND CAST(Project AS NUMERIC(18,5)) BETWEEN 1000 AND 2000

答案 1 :(得分:-1)

你能试试吗?

SELECT
    Project
FROM projects_table
WHERE 1 = CASE WHEN CHARINDEX('.', project) > 0 THEN
    1 ELSE
    project END