我创建了以下查询以删除项目编号点后面的最后一位数字: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。
这样做的正确方法是什么?
答案 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